diff options
| author | Werner Schweer <ws.seh.de> | 2008-01-17 12:42:33 +0000 | 
|---|---|---|
| committer | Werner Schweer <ws.seh.de> | 2008-01-17 12:42:33 +0000 | 
| commit | a3cd5dc244f6cb15e10d964a741a7a5b84584f7c (patch) | |
| tree | f8bb15f270ff4a00562e181548cb25425c5fdde6 | |
| parent | 0456594773839014a16045d1bab6d5eec6b10f67 (diff) | |
updates
| -rw-r--r-- | muse/AUTHORS | 0 | ||||
| -rw-r--r-- | muse/CMakeLists.txt | 48 | ||||
| -rw-r--r-- | muse/ChangeLog | 3 | ||||
| -rw-r--r-- | muse/README | 16 | ||||
| -rw-r--r-- | muse/SECURITY | 257 | ||||
| -rw-r--r-- | muse/TODO | 57 | ||||
| -rw-r--r-- | muse/al/pos.cpp | 27 | ||||
| -rw-r--r-- | muse/awl/tcanvas.h | 8 | ||||
| -rw-r--r-- | muse/muse/aboutbox.ui | 45 | ||||
| -rw-r--r-- | muse/muse/driver/jack.cpp | 2 | ||||
| -rw-r--r-- | muse/muse/mixer/astrip.cpp | 30 | ||||
| -rw-r--r-- | muse/muse/mixer/astrip.h | 2 | ||||
| -rw-r--r-- | muse/muse/mixer/mstrip.cpp | 30 | ||||
| -rw-r--r-- | muse/muse/mixer/mstrip.h | 2 | ||||
| -rw-r--r-- | muse/synti/zynaddsubfx/CMakeLists.txt | 38 | 
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><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><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</p><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;"><span style=" font-size:10pt; font-weight:400;">Version 1.0pre1</span></p><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;"></p><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. </p><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</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more information.</p><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;"></p><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</p></body></html></string> +      <string><html><head><meta name="qrichtext" content="1" /></head><body style=" white-space: pre-wrap; font-family:Arial; font-size:10pt; font-weight:400; font-style:normal; text-decoration:none;"><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</p><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;"><span style=" font-size:10pt; font-weight:400;">Version 2.0.0</span></p><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;"></p><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. </p><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</p><p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">more information.</p><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;"></p><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</p></body></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)  | 
