summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--muse/AUTHORS0
-rw-r--r--muse/CMakeLists.txt48
-rw-r--r--muse/ChangeLog3
-rw-r--r--muse/README16
-rw-r--r--muse/SECURITY257
-rw-r--r--muse/TODO57
-rw-r--r--muse/al/pos.cpp27
-rw-r--r--muse/awl/tcanvas.h8
-rw-r--r--muse/muse/aboutbox.ui45
-rw-r--r--muse/muse/driver/jack.cpp2
-rw-r--r--muse/muse/mixer/astrip.cpp30
-rw-r--r--muse/muse/mixer/astrip.h2
-rw-r--r--muse/muse/mixer/mstrip.cpp30
-rw-r--r--muse/muse/mixer/mstrip.h2
-rw-r--r--muse/synti/zynaddsubfx/CMakeLists.txt38
15 files changed, 175 insertions, 390 deletions
diff --git a/muse/AUTHORS b/muse/AUTHORS
deleted file mode 100644
index e69de29b..00000000
--- a/muse/AUTHORS
+++ /dev/null
diff --git a/muse/CMakeLists.txt b/muse/CMakeLists.txt
index aa3ab312..fbe97d72 100644
--- a/muse/CMakeLists.txt
+++ b/muse/CMakeLists.txt
@@ -54,16 +54,16 @@ include ( ${PROJECT_SOURCE_DIR}/cmake/TargetDoc.cmake)
option ( ENABLE_DSSI "enable Disposable Soft Synth Interface" ON)
option ( ENABLE_VST "enable VST/win support" OFF)
option ( ENABLE_FLUID "enable fluidsynth softsynth plugins" ON)
-option ( ENABLE_ZYNADDSUBFX "enable zyaddsubfx softsynth plugin" ON)
+option ( ENABLE_ZYNADDSUBFX "enable zyaddsubfx softsynth plugin" OFF)
##
## Just print a notice if this is OS X
##
if (APPLE)
- message("OS X detected.")
+ message("OS X found.")
else (APPLE)
if (UNIX)
- message("Unix (probably linux) detected")
+ message("Unix (probably linux) found")
endif(UNIX)
endif (APPLE)
@@ -114,7 +114,7 @@ PKGCONFIG (alsa 0.9.0 ALSA_INCDIR ALSA_LIBDIR ALSA_LIB ALSA_CPP )
if (NOT ALSA_INCDIR)
message(FATAL_ERROR "Fatal error: ALSA >= 1.0.0 required")
else (NOT ALSA_INCDIR)
- message("Alsa detected.")
+ message("Alsa found.")
endif (NOT ALSA_INCDIR)
endif (APPLE)
@@ -124,10 +124,16 @@ endif (APPLE)
## fftw3
## mxml
## fltk + fluid
+##
+## problems with FLTK:
+## - fltk is not found on kubuntu/ubuntu
+## - cmake version > 2.4 crashes
+## - there is an annoying (and wrong) usage message from cmake concerning FLTK
+##
if (ENABLE_ZYNADDSUBFX)
- set (FLTK_INCLUDE_DIR /usr/include)
- SET(FLTK_FLUID_EXECUTABLE "/usr/bin/fluid")
+## set (FLTK_INCLUDE_DIR "/usr/include")
+## set(FLTK_FLUID_EXECUTABLE "/usr/fluid")
include (FindFLTK)
if (NOT FLTK_FOUND)
@@ -142,8 +148,18 @@ if (ENABLE_ZYNADDSUBFX)
message("mxml >= 2.0 not found, zynaddsubfx not build")
set(ENABLE_ZYNADDSUBFX OFF)
else (NOT MXML_INCDIR)
- message("mxml detected.")
+ message("mxml found.")
endif (NOT MXML_INCDIR)
+ #
+ # TODO: check for fftw3 library
+ #
+ PKGCONFIG (fftw3 3.1.2 FFTW_INCDIR FFTW_LIBDIR FFTW_LIB FFTW_CPP )
+ if (NOT FFTW_INCDIR)
+ message("fftw3 >= 3.1.2 not found, zynaddsubfx not build")
+ set(ENABLE_ZYNADDSUBFX OFF)
+ else (NOT FFTW_INCDIR)
+ message("fftw3 found.")
+ endif (NOT FFTW_INCDIR)
endif (ENABLE_ZYNADDSUBFX)
@@ -155,7 +171,7 @@ PKGCONFIG (sndfile 1.0.0 SNDFILE_INCDIR SNDFILE_LIBDIR SNDFILE_LIB SNDFILE_CPP )
if (NOT SNDFILE_INCDIR)
message(FATAL_ERROR "Fatal error: libsndfile >= 1.0.0 required")
else (NOT SNDFILE_INCDIR)
- message("sndfile detected.")
+ message("sndfile found.")
endif (NOT SNDFILE_INCDIR)
##
@@ -166,7 +182,7 @@ PKGCONFIG (samplerate 0.1.0 SAMPLERATE_INCDIR SAMPLERATE_LIBDIR SAMPLERATE_LIB S
if (NOT SAMPLERATE_INCDIR)
message(FATAL_ERROR "Fatal error: libsamplerate >= 0.1.0 required")
else (NOT SAMPLERATE_INCDIR)
- message("samplerate detected")
+ message("samplerate found")
endif (NOT SAMPLERATE_INCDIR)
##
@@ -179,11 +195,11 @@ if (NOT JACK_INCDIR)
if (NOT JACK_INCDIR)
message(FATAL_ERROR "Fatal error: JACK >= 0.103 required")
else (NOT JACK_INCDIR)
- message("Jack 0.103 detected")
+ message("JACK 0.103 found")
set(JACK103 ON)
endif (NOT JACK_INCDIR)
else (NOT JACK_INCDIR)
- message("Jack 0.107 detected")
+ message("JACK 0.107 found")
set(JACK107 ON)
endif (NOT JACK_INCDIR)
@@ -197,13 +213,13 @@ if ( ENABLE_DSSI )
message("Error: dssi >= 0.9.0 not found, disabling feature")
set ( ENABLE_DSSI OFF )
else (NOT DSSI_INCDIR)
- message("DSSI detected.")
+ message("DSSI found.")
PKGCONFIG (liblo 0.23 LIBLO_INCDIR LIBLO_LIBDIR LIBLO_LIB LIBLO_CPP )
if (NOT LIBLO_INCDIR)
message("Error: liblo >= 0.23 not found, disabling DSSI")
set ( ENABLE_DSSI OFF )
else (NOT LIBLO_INCDIR)
- message("liblo >= 0.23 detected.")
+ message("liblo >= 0.23 found.")
set (DSSI_SUPPORT TRUE)
endif (NOT LIBLO_INCDIR)
endif (NOT DSSI_INCDIR)
@@ -233,7 +249,7 @@ if ( ENABLE_FLUID )
message("Error: fluidsynth >= 0.9.0 not found, disabling feature")
set ( ENABLE_FLUID OFF )
else (NOT FLUID_INCDIR)
- message("Fluidsynth detected")
+ message("Fluidsynth found")
endif (NOT FLUID_INCDIR)
endif ( ENABLE_FLUID )
@@ -301,8 +317,6 @@ set_source_files_properties(
PROPERTIES generated true
)
-subdirs(al awl grepmidi plugins midiplugins synti muse share doc)
-
include_directories(
.
${PROJECT_SOURCE_DIR}
@@ -350,3 +364,5 @@ IF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
INCLUDE(CPack)
ENDIF(EXISTS "${CMAKE_ROOT}/Modules/CPack.cmake")
+subdirs(al awl grepmidi plugins midiplugins muse share doc synti)
+
diff --git a/muse/ChangeLog b/muse/ChangeLog
index 51c35dd0..9d3b8889 100644
--- a/muse/ChangeLog
+++ b/muse/ChangeLog
@@ -1,3 +1,6 @@
+17.1. (ws)
+ - routing pulldown menu in mixer will stay if SHIFT is pressed while clicking;
+ this allows for fast selection of more than one routing targets
30.12. (rj)
- added drum filter mux plugin. Useful when driving a sampled drumkit
with multi sampled drums. Especially if they also have multiple keys
diff --git a/muse/README b/muse/README
index 06adeb2f..8620829e 100644
--- a/muse/README
+++ b/muse/README
@@ -20,7 +20,7 @@ details.
Requirements
=============================
- - CMake 2.4
+ - CMake 2.4
http:/www.cmake.org/HTML/Download.html
- QT: Qt 4.2.0 or above
@@ -32,7 +32,7 @@ details.
- gcc 4.x.x
- - libsndfile >= 1.0.1
+ - libsndfile >= 1.0.1
http://www.zip.com.au/~erikd/libsndfile/
- libsamplerate
@@ -46,9 +46,9 @@ details.
http://savannah.nongnu.org/download/fluid
- DSSI
-
+
- ConTeXt (for building documentation, by default the build
- script tries to build documentation, can be
+ script tries to build documentation, can be
disabled by setting ENABLE_DOCUMENTATION to OFF)
=============================
@@ -86,8 +86,8 @@ details.
chmod 660 /dev/rtc
chgrp audio /dev/rtc
- - make sure MusE cat set the rtc clock:
- echo 8192 > /proc/sys/dev/rtc/max-user-freq
+ - make sure MusE can set the rtc clock:
+ echo 8192 > /proc/sys/dev/rtc/max-user-freq
inspect with:
cat /proc/sys/dev/rtc/max-user-freq
@@ -99,12 +99,12 @@ details.
/sbin/modprobe snd-seq
(same distros (ubuntu) do not load it by default :-( )
- - start qjackctl
+ - start qjackctl
- start JACK with qjackctl
- start MusE
- (JACK and all its clients (qjackctl & MusE) must run with the
+ (JACK and all its clients (qjackctl & MusE) must run with the
same user id)
diff --git a/muse/SECURITY b/muse/SECURITY
deleted file mode 100644
index 9daf0171..00000000
--- a/muse/SECURITY
+++ /dev/null
@@ -1,257 +0,0 @@
-NOTE:
-The following information is outdated. There are now other mechanisms
-available to give audio programs the necessary priviledges:
-
- realtime-lsm kernel modul
- or the upcoming
- set_rtlimits
-
-The advice is to use one of this methods and _never_ run any audio program
-with root priviledges.
-
-
-
-MusE Security Information
-=========================
-
-In order to operate reliably at low latencies, MusE needs root privileges.
-For a stand-alone computer in a home environment, this is not a problem.
-However, on networked machines with multi-user access, there are some security
-issues to be aware of.
-
-
-Why does MusE require root privileges ?
----------------------------------------
-
-1.
-MusE must set the real time clock (/dev/rtc/) to a higher rate in order to get
-a more precise timing source than the standard setting would allow.
-For this task, it is *not* sufficient to alter the permissions or group of
-/dev/rtc. You need root access.
-
-2.
-The MusE audio threads must acquire real-time scheduling to perform with low
-latency and free of dropouts. Since this could be misused for a local
-denial-of-service attack (you can hog 100% cpu with a real-time task, thus
-effectively making the system unusable), only root is allowed to do that.
-
-
-Do I need to be root to run MusE ?
-----------------------------------
-
-No. You should not do normal work as root. Use the root login exclusively for
-administrative tasks. You can run MusE as a normal user, provided you have set
-the *suid bit*.
-This is done automatically when you build and install MusE.
-
-
-How does this "suid bit" thing work ?
---------------------------------------
-
-Normally, when a program is started, it gets the user and group id of the user
-who started it, and thus has the same permissions as the user. It can read and
-write the same files and use the same devices.
-
-Some applications need higher privileges to perform certain tasks, but must be
-available to normal users. To accomplish this, UNIX-like systems have the
-concept of the "effective user id".
-
-That means you can start a process, but the effective user id will be someone
-else's, most likely that of the root user. You can recognize such programs by
-the suid (for set-user-id) bit in their permissions.
-
-For example, when you do
-
- #ls -l /bin/ping
-
-you will see something like
-
- -rwsr-xr-x 1 root root 20908 Feb 27 2001 /bin/ping .
-
-This tells you it's a normal file (the first dash), it is readable and writable
-by the owner (root) and has the owner's suid bit set (the letter "s").
-You may invoke it as a normal user, but the program will have root permissions
-while it runs.
-
-(Btw, there is also an sgid (set-group-id) bit, which allows a program to be run
-with the permissions of the group it is owned by. This can be used for
-finer-grained access control to some programs but is rarely used in practice.)
-
-(Btw2, the letter "s" actually means both "executable" AND "set-{user,group}-id".
-A capital "S" stands for "set-uid" without the execution privilege, which also
-very rarely seen on real systems.)
-
-
-What is the problem with suid programs ?
-----------------------------------------
-
-suid programs are safe as long as you can be sure they do only the job they were
-written to do. For instance, you certainly want users to be able to do a ping,
-but you wouldn't want them to wipe out the system disk while doing it.
-
-Unfortunately, there is a very common vulnerability in many programs called a
-buffer overflow, which allows an attacker to spawn a shell from within a suid
-program that inherits the permissions, giving him or her root access to the
-entire system.
-This exploit is fairly easy for an experienced attacker. All that's needed is
-the compiled equivalent of the C expression execve("/bin/sh"), which can be
-inserted into the running program whenever it does not check the length of user
-input properly, by overflowing a buffer and thus overwriting a part of
-the program code with the shell exploit code.
-
-The more complex a program becomes, the more likely buffer overflow
-vulnerabilities slip in.
-
-If you are interested in details of such attacks, I recommend AlephOne's paper
-"Smashing the stack for fun and profit", to be found in Issue 49 of Phrack
-Magazine (http://www.phrack.com/show.php?p=49&a=14).
-
-
-Does MusE have buffer-overflow vulnerabilities ?
-------------------------------------------------
-
-It may. But even if it had not, it is good practice to assume it does.
-As soon as you are in a security-critical environment, you should treat all suid
-programs with extra care unless they are proven to be secure.
-
-This is a gruesome and boring task, and we all want Werner to concentrate on
-cool new features rather than digging through the code to fix loopholes that
-aren't even a problem for 99% of the MusE users.
-MusE does not need to be as secure as server daemons. It is intended for home
-use in a trusted environment.
-If you run MusE on your company's primary DNS server, it's your fault.
-
-But even home machines can become targets for intruders the moment they connect
-to the internet. Since almost all of the machines than run MusE are occasionally
-used to surf the web, it might be worth taking a few precautions.
-
-
-What can I do to minimize the risk of a suid program ?
-------------------------------------------------------
-
-By default, Werner drops the root privileges in MusE's GUI thread - only the
-audio threads keep it. This rules out many possible exploits, since GUI code is
-usually the hardest to make secure.
-
-
-As a further very simple yet effective security precaution, you can create a
-group of trusted users, and give only this group access to critical suid
-programs. For example, you might create a group called musers, of which you and
-your best friend are members. Then you can set the muse binary as follows:
-
- #chown root:musers muse
- #chmod 4750 muse
- #ls -l muse
- -rwsr-x--- 1 root musers 20930049 Aug 28 19:34 muse
-
-Now only members of the group musers can use MusE, Joe Random Hacker can not.
-(However, if your account is hacked, MusE can then be exploited to gain root,
-but hey...)
-
-Additionally, you can use "givertcap" as described in the next section.
-
-
-What is givertcap and how do I use it ?
----------------------------------------
-
-"givertcap" (give real-time capabilites) is a small wrapper written by Tommi
-Ilmonen.
-When enabled, it is executed by MusE and gives to it just the capabilities
-needed to set the timer and get real-time scheduling, but not the full set of
-root privileges. This greatly reduces the amount of damage that can be done.
-
-However, it is not used by default, since it requires a kernel modification.
-
-To enable givertcap, simply call ./configure --enable-rtcap before compiling.
-(The givertcap code is part of the MusE distribution.)
-
-With current kernels, you need to apply a little patch to the kernel headers:
-Go to /usr/src/linux/include/linux (or wherever you have your kernel sources)
-and in the file capability.h change the line
-
- #define CAP_INIT_EFF_SET to_cap_t(~0&~CAP_TO_MASK(CAP_SETPCAP))
-to
- #define CAP_INIT_EFF_SET to_cap_t( ~0 )
-
-and the line
-
- #define CAP_INIT_INH_SET to_cap_t(0)
-to
- #define CAP_INIT_INH_SET to_cap_t( ~0 )
-.
-
-You must then recompile your kernel.
-
-In this setup, givertcap must be set suid root, but MusE can be run with normal
-privileges.
-Now all possible suid exploits described above apply to givertcap, but since it
-is such a tiny program, it can be checked for exploits far more easily and can
-be considered reasonably secure.
-
-Unfortunately, givertcap can be used to grant real-time privileges to *any*
-program, so it's an easy way to have the machine clogged up by a malicious user
-who might run bogus tasks at 100% system usage.
-Therefore, you *must* create an extra group for it (called "musers" in this
-example):
- # chown root:musers givertcap
- # chmod 4750 givertcap
-Do not forget to remove the suid bit on muse afterwards by doing
- # chmod 755 muse
-.
-
-For more information about givertcap and kernel capabilites, see
-http://www.tml.hut.fi/~tilmonen/givertcap/
-and
-http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2.
-txt.
-
-
-
-Further reading:
-================
-
-General Linux system security:
-http://linuxdoc.org/HOWTO/Security-Quickstart-HOWTO/
-http://linuxdoc.org/HOWTO/Security-HOWTO.html
-
-Secure Linux programming:
-http://linuxdoc.org/HOWTO/Secure-Programs-HOWTO/
-
-Permissions:
-man chmod
-man chattr
-
-givertcap:
-http://www.tml.hut.fi/~tilmonen/givertcap/
-
-An alternative approach, using a kernel module:
-http://arctrix.com/nas/linux/capwrap.tar.gz
-
-Kernel capabilites:
-http://ftp.kernel.org/pub/linux/libs/security/linux-privs/kernel-2.4/capfaq-0.2.
-txt
-
-Adding capability flags to ELF files:
-http://atrey.karlin.mff.cuni.cz/~pavel/elfcap.html
-
-
-Buffer Overflow attacks:
-"Smashing the stack for fun and profit" by AlephOne 1996, published in
-Phrack magazine, issue 49
-http://www.phrack.com/show.php?p=49&a=14
-
-In the MusE source, app.cpp contains the invocation of givertcap and the
-dropping of the suid privileges: grep for "getCapabilities" and "setuid" to see
-how it's done.
-
-________________________________________________________________________________
-
-
-This document was written by Jörn Nettingsmeier
-<nettings@folkwang-hochschule.de>
-Corrections and improvements welcome.
-
-Thanks to Werner Schweer and Tommi Ilmonen for answering my questions.
-
-Last updated 02/22/2002.
-
diff --git a/muse/TODO b/muse/TODO
deleted file mode 100644
index 7398445e..00000000
--- a/muse/TODO
+++ /dev/null
@@ -1,57 +0,0 @@
------------------------------TODO-------------------------------------------
-(29.10.2006)
-----------------------------------------------------------------------------
-
- - dont allow for overlapping parts
- - automatically create unique default part names
-
-BUGS
- - make sure all track names are unique
-
- ? updating the gui during midi recording is too slow;
- a new, faster implementation is needed
-
- - dont allow midi editing during recording. Treat recording
- as one undoable action.
-
- - Do not allow switch track recording on/off during recording
-
- - looping does not work sample accurate due to jack transport
- limitations; looping should be implemented internally to work
- around this
-
- - make export midi work
-
-FEATURES
- - missing time signature ruler in master editor
-
- - If events recorded outside part ask after recording what to do:
- delete events / expand part
-
- - what to do with events, which start in a part and end outside
- a part (too long to fit entirely in part)
- - on recording
- - on cut part (split?)
-
- - recording: punch in/out
-
- - system info page: show internal statistics about
- - buffer usage (fifo usage)
- - overruns/underruns etc.
- - actual thread state and priorities
- - actual used timer resource
-
- - Import MusE 0.7 song files
- - use *.svg icons
- - click free mute function
-
-
-CLEANUPS
- - Cleanup the icon/pixmap handling using Qt resource file:
- - remove all unreferenced files
- - transform *.xpm into *.pnm or *.jpg files and move into
- resource file
- - redirect all *xpm program references to resource file
- - remove icon.cpp icon.h
-
-
diff --git a/muse/al/pos.cpp b/muse/al/pos.cpp
index 8e9fcf87..f8418a00 100644
--- a/muse/al/pos.cpp
+++ b/muse/al/pos.cpp
@@ -498,7 +498,7 @@ bool PosLen::operator==(const PosLen& pl) const {
if(type()==TICKS)
return (_lenTick==pl._lenTick && Pos::operator==((const Pos&)pl));
else
- return (_lenFrame==pl._lenFrame && Pos::operator==((const Pos&)pl));
+ return (_lenFrame==pl._lenFrame && Pos::operator==((const Pos&)pl));
}
//---------------------------------------------------------
@@ -516,6 +516,7 @@ void Pos::mbt(int* bar, int* beat, int* tk) const
void Pos::msf(int* min, int* sec, int* fr, int* subFrame) const
{
+#if 0
//double has been replaced by float because it prevents (mysteriously)
//from a segfault that occurs at the launching of muse
/*double*/ float time = double(frame()) / double(AL::sampleRate);
@@ -540,6 +541,30 @@ void Pos::msf(int* min, int* sec, int* fr, int* subFrame) const
}
*fr = int(rest);
*subFrame = int((rest- *fr)*100);
+#else
+ // for further testing:
+
+ double time = double(frame()) / double(AL::sampleRate);
+ *min = int(time) / 60;
+ *sec = int(time) % 60;
+ double rest = time - ((*min) * 60 + (*sec));
+ switch(AL::mtcType) {
+ case 0: // 24 frames sec
+ rest *= 24;
+ break;
+ case 1: // 25
+ rest *= 25;
+ break;
+ case 2: // 30 drop frame
+ rest *= 30;
+ break;
+ case 3: // 30 non drop frame
+ rest *= 30;
+ break;
+ }
+ *fr = lrint(rest);
+ *subFrame = lrint((rest - (*fr)) * 100.0);
+#endif
}
//---------------------------------------------------------
diff --git a/muse/awl/tcanvas.h b/muse/awl/tcanvas.h
index 50e6085e..7e3841f2 100644
--- a/muse/awl/tcanvas.h
+++ b/muse/awl/tcanvas.h
@@ -140,7 +140,7 @@ class TimeCanvas : public QFrame {
bool eventFilter(QObject*, QEvent*);
- virtual void paint(QPainter&, QRect) { printf("paint method not overloaded\n"); }
+ virtual void paint(QPainter&, QRect) = 0;
virtual void mousePress(QMouseEvent*) { printf("mousePress method not overloaded\n"); }
virtual void mouseMove(QPoint) { printf("mouseMove method not overloaded\n"); }
virtual void mouseRelease(QMouseEvent*) { printf("mouseRelease method not overloaded\n"); }
@@ -149,9 +149,9 @@ class TimeCanvas : public QFrame {
virtual void layout() { printf("layout method not overloaded\n"); }
virtual void enterB() { printf("enterB method not overloaded\n"); }
virtual void leaveB() { printf("leaveB method not overloaded\n"); }
-
+
virtual void setCursor();
-
+
virtual void timeTypeChanged() { printf("timeTypeChanged method not overloaded\n");}
virtual void magChanged() { printf("magChanged method not overloaded\n");}
@@ -164,7 +164,7 @@ class TimeCanvas : public QFrame {
virtual void dragLeave(QDragLeaveEvent*) { printf("dragLeave method not overloaded\n"); }
virtual void addController() { printf("addController method not overloaded\n"); }
-
+
virtual void keyPressEvent(QKeyEvent *e);
virtual void keyboardNavigate(QKeyEvent *) { printf("keyboardNavigate method not overloaded\n"); }
diff --git a/muse/muse/aboutbox.ui b/muse/muse/aboutbox.ui
index a570f6bc..4016babc 100644
--- a/muse/muse/aboutbox.ui
+++ b/muse/muse/aboutbox.ui
@@ -10,9 +10,7 @@
</rect>
</property>
<property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>7</vsizetype>
+ <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -490,24 +488,34 @@
<string>AboutBox</string>
</property>
<layout class="QGridLayout" >
- <property name="margin" >
+ <property name="leftMargin" >
<number>9</number>
</property>
- <property name="spacing" >
+ <property name="topMargin" >
+ <number>9</number>
+ </property>
+ <property name="rightMargin" >
+ <number>9</number>
+ </property>
+ <property name="bottomMargin" >
+ <number>9</number>
+ </property>
+ <property name="horizontalSpacing" >
+ <number>6</number>
+ </property>
+ <property name="verticalSpacing" >
<number>6</number>
</property>
<item row="0" column="2" >
<widget class="QLabel" name="textLabel1" >
<property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>7</vsizetype>
+ <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="text" >
- <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;/head>&lt;body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;">&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt; font-weight:600;">MusE&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt; font-weight:600;">&lt;span style=" font-size:10pt; font-weight:400;">Version 1.0pre1&lt;/span>&lt;/p>&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(C) Copyright 1999-2006 Werner Schweer and others. &lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">See http://muse-sequencer.org for new versions and&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more information.&lt;/p>&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Published under the GNU Public License&lt;/p>&lt;/body>&lt;/html></string>
+ <string>&lt;html>&lt;head>&lt;meta name="qrichtext" content="1" />&lt;/head>&lt;body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;">&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt; font-weight:600;">MusE&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-size:14pt; font-weight:600;">&lt;span style=" font-size:10pt; font-weight:400;">Version 2.0.0&lt;/span>&lt;/p>&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">(C) Copyright 1999-2008 Werner Schweer and Others. &lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">See http://muse-sequencer.org for new versions and&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more information.&lt;/p>&lt;p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">&lt;/p>&lt;p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Published under the GNU Public License&lt;/p>&lt;/body>&lt;/html></string>
</property>
<property name="wordWrap" >
<bool>false</bool>
@@ -527,9 +535,7 @@
<item row="0" column="0" >
<widget class="QLabel" name="museIcon" >
<property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>0</hsizetype>
- <vsizetype>5</vsizetype>
+ <sizepolicy vsizetype="Preferred" hsizetype="Fixed" >
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
@@ -547,12 +553,21 @@
</item>
<item row="1" column="0" colspan="3" >
<layout class="QHBoxLayout" >
- <property name="margin" >
- <number>0</number>
- </property>
<property name="spacing" >
<number>6</number>
</property>
+ <property name="leftMargin" >
+ <number>0</number>
+ </property>
+ <property name="topMargin" >
+ <number>0</number>
+ </property>
+ <property name="rightMargin" >
+ <number>0</number>
+ </property>
+ <property name="bottomMargin" >
+ <number>0</number>
+ </property>
<item>
<spacer>
<property name="orientation" >
diff --git a/muse/muse/driver/jack.cpp b/muse/muse/driver/jack.cpp
index e942fb43..34a92dfe 100644
--- a/muse/muse/driver/jack.cpp
+++ b/muse/muse/driver/jack.cpp
@@ -818,9 +818,7 @@ bool initJackAudio()
if (debugMsg)
fprintf(stderr, "init Jack Audio: register device\n");
-printf("create jack, %p\n", client);
jackAudio = new JackAudio(client, jack_get_client_name(client));
-printf("create jack, client=%p jack=%p\n", client, jackAudio);
if (debugMsg)
fprintf(stderr, "init Jack Audio: register client\n");
jackAudio->registerClient();
diff --git a/muse/muse/mixer/astrip.cpp b/muse/muse/mixer/astrip.cpp
index 11b6833e..449a718f 100644
--- a/muse/muse/mixer/astrip.cpp
+++ b/muse/muse/mixer/astrip.cpp
@@ -188,11 +188,13 @@ AudioStrip::AudioStrip(Mixer* m, AudioTrack* t, bool align)
iR = newInRouteButton();
grid->addWidget(iR, 12, 0);
connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow()));
+ connect(iR->menu(), SIGNAL(aboutToHide()), SLOT(iRouteHide()));
connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*)));
oR = newOutRouteButton();
grid->addWidget(oR, 12, 1);
connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow()));
+ connect(oR->menu(), SIGNAL(aboutToHide()), SLOT(oRouteHide()));
connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*)));
if (off) {
@@ -628,6 +630,34 @@ void AudioStrip::iRouteShow()
}
//---------------------------------------------------------
+// iRouteHide
+//---------------------------------------------------------
+
+void AudioStrip::iRouteHide()
+ {
+ // dont leave the menu if SHIFT is pressed; this allows
+ // for fast selecting of more than one input source
+ //
+ if (qApp->keyboardModifiers() & Qt::ShiftModifier) {
+ iR->menu()->show();
+ }
+ }
+
+//---------------------------------------------------------
+// oRouteHide
+//---------------------------------------------------------
+
+void AudioStrip::oRouteHide()
+ {
+ // dont leave the menu if SHIFT is pressed; this allows
+ // for fast selecting of more than one input source
+ //
+ if (qApp->keyboardModifiers() & Qt::ShiftModifier) {
+ oR->menu()->show();
+ }
+ }
+
+//---------------------------------------------------------
// oRouteShow
//---------------------------------------------------------
diff --git a/muse/muse/mixer/astrip.h b/muse/muse/mixer/astrip.h
index f3710382..f0806fda 100644
--- a/muse/muse/mixer/astrip.h
+++ b/muse/muse/mixer/astrip.h
@@ -72,7 +72,9 @@ class AudioStrip : public Strip {
void preToggled(bool);
void offToggled(bool);
void iRouteShow();
+ void iRouteHide();
void oRouteShow();
+ void oRouteHide();
void volumeChanged(double);
void volumePressed();
void volumeReleased();
diff --git a/muse/muse/mixer/mstrip.cpp b/muse/muse/mixer/mstrip.cpp
index 5c88ab43..1b927aae 100644
--- a/muse/muse/mixer/mstrip.cpp
+++ b/muse/muse/mixer/mstrip.cpp
@@ -289,11 +289,13 @@ MidiStrip::MidiStrip(Mixer* m, MidiTrack* t, bool align)
iR = newInRouteButton();
grid->addWidget(iR, 14, 0);
connect(iR->menu(), SIGNAL(aboutToShow()), SLOT(iRouteShow()));
+ connect(iR->menu(), SIGNAL(aboutToHide()), SLOT(iRouteHide()));
connect(iR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*)));
oR = newOutRouteButton();
grid->addWidget(oR, 14, 1);
connect(oR->menu(), SIGNAL(aboutToShow()), SLOT(oRouteShow()));
+ connect(oR->menu(), SIGNAL(aboutToHide()), SLOT(oRouteHide()));
connect(oR->menu(), SIGNAL(triggered(QAction*)), song, SLOT(routeChanged(QAction*)));
connect(song, SIGNAL(songChanged(int)), SLOT(songChanged(int)));
@@ -311,6 +313,34 @@ MidiStrip::MidiStrip(Mixer* m, MidiTrack* t, bool align)
}
//---------------------------------------------------------
+// iRouteHide
+//---------------------------------------------------------
+
+void MidiStrip::iRouteHide()
+ {
+ // dont leave the menu if SHIFT is pressed; this allows
+ // for fast selecting of more than one input source
+ //
+ if (qApp->keyboardModifiers() & Qt::ShiftModifier) {
+ iR->menu()->show();
+ }
+ }
+
+//---------------------------------------------------------
+// oRouteHide
+//---------------------------------------------------------
+
+void MidiStrip::oRouteHide()
+ {
+ // dont leave the menu if SHIFT is pressed; this allows
+ // for fast selecting of more than one input source
+ //
+ if (qApp->keyboardModifiers() & Qt::ShiftModifier) {
+ oR->menu()->show();
+ }
+ }
+
+//---------------------------------------------------------
// songChanged
//---------------------------------------------------------
diff --git a/muse/muse/mixer/mstrip.h b/muse/muse/mixer/mstrip.h
index 007be297..4c3269de 100644
--- a/muse/muse/mixer/mstrip.h
+++ b/muse/muse/mixer/mstrip.h
@@ -74,7 +74,9 @@ class MidiStrip : public Strip {
void autoReadToggled(bool);
void autoWriteToggled(bool);
void iRouteShow();
+ void iRouteHide();
void oRouteShow();
+ void oRouteHide();
void recordToggled(bool);
void monitorToggled(bool);
diff --git a/muse/synti/zynaddsubfx/CMakeLists.txt b/muse/synti/zynaddsubfx/CMakeLists.txt
index 46d1d3df..79cf5f8d 100644
--- a/muse/synti/zynaddsubfx/CMakeLists.txt
+++ b/muse/synti/zynaddsubfx/CMakeLists.txt
@@ -23,29 +23,8 @@ include_directories(
BEFORE ${CMAKE_CURRENT_BINARY_DIR}
)
-FLTK_WRAP_UI ( FLTKUI
- UI/ADnoteUI.fl
- UI/BankUI.fl
- UI/ConfigUI.fl
- UI/EffUI.fl
- UI/EnvelopeUI.fl
- UI/FilterUI.fl
- UI/LFOUI.fl
- UI/MasterUI.fl
- UI/MicrotonalUI.fl
- UI/OscilGenUI.fl
- UI/PADnoteUI.fl
- UI/PartUI.fl
- UI/PresetsUI.fl
- UI/ResonanceUI.fl
- UI/SUBnoteUI.fl
- UI/SeqUI.fl
- UI/VirKeyboard.fl
- UI/WidgetPDial.fl
- )
-
-add_library ( zynaddsubfx SHARED
- ${FLTKUI_FLTK_UI_SRCS}
+add_library (
+ zynaddsubfx SHARED
DSP/AnalogFilter.C
DSP/FFTwrapper.C
DSP/Filter.C
@@ -105,14 +84,13 @@ set_target_properties ( zynaddsubfx
target_link_libraries( zynaddsubfx
synti fftw3 mxml
m z fltk
+ zyngui
)
-install_targets ( /${CMAKE_INSTALL_LIBDIR}/${MusE_INSTALL_NAME}/synthi/ zynaddsubfx )
-
-## needs cmake version > 2.4.3
-## INSTALL(
-## DIRECTORY banks
-## DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${MusE_INSTALL_NAME}/presets/zynaddsubfx
-## )
+INSTALL(
+ DIRECTORY banks
+ DESTINATION ${CMAKE_INSTALL_PREFIX}/share/${MusE_INSTALL_NAME}/presets/zynaddsubfx
+ )
+subdirs(UI)