• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

al/H03-May-2022-2,1291,355

audio_convert/H03-May-2022-5,2293,763

awl/H03-May-2022-8,4674,916

cmake/H24-Apr-2021-240202

demos/H03-May-2022-378377

doc/H03-May-2022-2,5822,224

grepmidi/H03-May-2022-365283

libs/H03-May-2022-20,33214,292

man/H03-May-2022-148106

muse/H03-May-2022-319,299227,615

packaging/H03-May-2022-429327

plugins/H03-May-2022-2,0781,210

qss/H24-Apr-2021-4038

sandbox/H03-May-2022-335213

share/H03-May-2022-295,023287,241

svg/projects/H03-May-2022-

synti/H03-May-2022-254,472235,763

utils/H03-May-2022-858633

vestige/H24-Apr-2021-321207

windows/H03-May-2022-

xpm/H03-May-2022-119

AUTHORSH A D24-Apr-20213.5 KiB8369

COPYINGH A D24-Apr-202115 KiB289241

ChangeLogH A D24-Apr-2021519.3 KiB8,2998,207

Doxyfile.inH A D24-Apr-20215.8 KiB151150

LICENSEH A D24-Apr-202125 31

READMEH A D24-Apr-202115.5 KiB432319

README.developerH A D24-Apr-20212.7 KiB6546

README.developer.undo_systemH A D24-Apr-20217.2 KiB179137

README.ladspaguisH A D24-Apr-20211.9 KiB5745

README.softsynthH A D24-Apr-20212.8 KiB8761

README.vstsdkH A D24-Apr-20211.2 KiB2520

README.win32H A D24-Apr-20212.7 KiB10487

SECURITYH A D24-Apr-20219.2 KiB254180

compile_components_ui.plH A D24-Apr-2021662 2415

compile_muse.shH A D24-Apr-20211.3 KiB368

compile_muse_mingw.shH A D24-Apr-20211.4 KiB378

config.h.inH A D24-Apr-20212.2 KiB6560

find_manual_plural.shH A D24-Apr-2021721 214

find_translation_concatenation.shH A D24-Apr-2021467 174

fix_make_paths.plH A D24-Apr-20211.7 KiB4535

libdivide_LICENSEH A D24-Apr-20212.4 KiB5642

resources.qrcH A D24-Apr-20218.8 KiB219218

README

1====================================================================
2      MusE  ---  Linux Music Editor
3====================================================================
4
5Welcome to MusE, the open source MIDI/Audio sequencer.
6
7MusE is distributed under the GNU General Public License (GPL).
8Please check out the file COPYING in the src/ directory for more
9details.
10
11
12  =============================
13      Features:
14  =============================
15
16      MIDI sequencing:
17         - Realtime record/playback
18         - Midi file import/export
19         - Input filter
20         - Support for internal softsynth plugins using
21           LV2, DSSI, VST, LinuxVST and MESS
22         - much more
23
24      Audio sequencing:
25         - Realtime Record/Playback several mono/stereo inputs/outputs
26         - Graphical editing of automation
27         - Support for LADSPA, LV2, DSSI, VST, LinuxVST plugins
28
29      Technologies supported:
30         - LASH - for session control with external LASH enabled applications
31         - JACK - The Jack Audio Connection Kit can be used for audio and midi
32         - RtAudio - basic audio input/output for Pulse, ALSA and OSS
33         - ALSA midi
34         - Plugin formats: LV2, DSSI, VST, LinuxVST, MESS
35         - Support Inst(rument) Patch Library for enhanced fluidsynth features.
36         - FLAM plugin guis.
37         - Built on Qt5
38
39
40
41
42,-----------------------------------------------------------------.
43| NOTICE                                                          |
44|-----------------------------------------------------------------|
45| Some parts of MusE code are EXPERIMENTAL, and may well result   |
46| in a CRASH, and who knows what other ill effects.               |
47| RUN THIS SOFTWARE AT YOUR OWN RISK.                             |
48`-----------------------------------------------------------------'
49
50  =============================
51      Requirements:
52  =============================
53
54      - CMake >= 2.4
55          http:/www.cmake.org/HTML/Download.html
56
57      - Qt: Qt >= 5.7.0 (development files)
58          http://qt-project.org/
59          MusE does _not_ compile with older versions
60          For ubuntu packages can be installed via:
61          sudo apt-get install qt5-default qttools5-dev qttools5-dev-tools
62
63      - gcc >= 4.x.x or clang >= 2.9
64          http://gcc.gnu.org/
65          http://clang.llvm.org/
66
67      - libsndfile >= 1.0.1 (development files)
68          http://www.mega-nerd.com/libsndfile/
69
70      - libsamplerate >= 0.1.0 (development files)
71          http://www.mega-nerd.com/SRC/
72
73      - JACK version 1 >= 0.103 (development files) or
74        JACK version 2 >= 1.9.9.5 (development files)
75          http://jackaudio.org/
76
77      - LADSPA (development file ladspa.h)
78         www.ladspa.org
79
80
81  =============================
82      Optional:
83  =============================
84
85      - ALSA >= 0.9.0  Advanced Linux Sound Architecture (development files)
86          http://www.alsa-project.org/
87
88      - fluidsynth >= 1.0.3 (formerly known as iiwusynth) (development files)
89          http://sourceforge.net/apps/trac/fluidsynth/
90
91      - libinstpatch >= 1.0    Instrument Patch Library (development files)
92          http://www.swamiproject.org/
93
94      - RtAudio >=5.0 audio input/output support.
95          https://www.music.mcgill.ca/~gary/rtaudio/
96
97      - LV2 (LADSPA Version 2) plugin support:
98
99        lilv >= 0.22.0 (development files)
100        sord >= 0.14.0 (development files)
101          http://drobilla.net/software
102
103        lv2 >= 1.12.0 (development files)
104          http://lv2plug.in
105
106      - LV2 Gtk2 User Interface support:
107
108        Some LV2 plugins may provide a Gtk2 based graphical User Interface.
109        To view them, the following is required (development files):
110        gtkmm-2
111         http://www.gtkmm.org
112        gtk+-2
113         http://www.gtk.org
114
115      - DSSI     Disposable Soft Synth Interface (development files)
116          http://dssi.sourceforge.net/
117
118      - liblo    Lightweight OSC (Open Sound Control) (development files)
119          http://liblo.sourceforge.net/
120
121        (Both recommended - DSSI can use OSC, OSC alone does nothing, for now.)
122
123      - dssi-vst        Support for DSSI vst plugins
124          http://www.breakfastquay.com/dssi-vst/
125
126      - LASH            Audio Session Handler
127          http://lash.nongnu.org/
128          Recently LADISH has been emulating it instead:
129          http://ladish.org/
130
131      - Python    The python scripting language
132          http://www.python.org
133          The remote control supports Python 3.
134          See https://github.com/muse-sequencer/muse/wiki/python-remote-control.
135          The bundled midi scripts ('Scripts', or 'Plugins' in earlier versions) require Python 3.
136
137      - Pyro 4    Python Remote Objects
138          https://pythonhosted.org/Pyro4/
139          The remote control supports Pyro 4.
140          See https://github.com/muse-sequencer/muse/wiki/python-remote-control.
141
142      - PyQt5 is used by some of the bundled midi scripts ('Scripts', or 'Plugins' in earlier versions).
143
144
145  Quick instructions for Ubuntu and similar distributions:
146
147  =================================
148      Building MusE under Debian/Ubuntu:
149  =================================
150
151    1. Install build tools:
152
153       sudo apt-get install git build-essential cmake
154
155    2 Get muse source (unless you already have it).
156
157       Choose one of the below:
158         a. Download the latest muse source distribution from
159           https://muse-sequencer.github.io/
160
161         b. Clone muse source:
162           git clone https://github.com/muse-sequencer/muse.git
163
164    3. Install libraries:
165
166       sudo apt-get install\
167         libsndfile1-dev\
168         libsamplerate0-dev\
169         libjack-jackd2-dev\
170         ladspa-sdk\
171         qt5-default\
172         qttools5-dev\
173         qttools5-dev-tools\
174         liblo-dev\
175         dssi-dev\
176         lv2-dev\
177         libsamplerate0-dev\
178         libsndfile1-dev\
179         libfluidsynth-dev\
180         libgtkmm-2.4-dev\
181         librtaudio-dev\
182         libqt5svg5-dev\
183         libinstpatch-dev\
184         liblilv-dev\
185         liblrdf0-dev\
186         librubberband-dev\
187         python3-dev\
188         python3-pyqt5
189
190    4. Change directory:
191
192       cd muse/src
193
194    5. Compile:
195
196       ./compile_muse.sh
197
198    6. Change directory:
199
200       cd build
201
202    7. Install in /usr/local:
203
204       sudo make install
205
206    8. Run:
207
208       muse4
209
210  =============================
211      Generic building MusE:
212  =============================
213
214      - Download source from http://muse-sequencer.org/
215
216      - Unpack the source somewhere.
217
218        You may also try the various MusE development GIT branches for
219         up-to-the-minute features and fixes, but they may be less stable.
220
221      - To compile MusE, run the following commands from the
222         top level directory where the source code was unpacked
223         (the directory where THIS README FILE is found):
224
225	    ******************************************************
226        *                      Notice:                       *
227        * A quick way is to run the ./compile_muse.sh        *
228        * script in the same dir, it should perform the same *
229        * steps for a basic setup without asking any         *
230        * questions. If it fails you may be better off using *
231        * the instructions below.                            *
232        ******************************************************
233
234        The build directory:
235        --------------------
236          Building in a subdirectory is recommended to keep the build directory separate from the source tree.
237          So create a new subdirectory with a useful name like "build" or "debug" or "release":
238            mkdir build
239          Change directory (cd) to the new directory:
240            cd build
241
242        Configuration:
243        --------------
244          There are a few different ways to configure (notice the two dots):
245
246          Type "cmake -L .." to see options, then compose "cmake <options>" yourself.
247          Some <options> are:
248
249            -DCMAKE_BUILD_TYPE=<type>
250               <type> can be blank (to reset a previous cached type to 'empty'),
251                Debug, Release, RelWithDebInfo and MinSizeRel.
252               Release is recommended, to get optimizations.
253               If no CMAKE_BUILD_TYPE is given at all, cmake uses either the previous
254                cached value, or else 'empty' (plain or default system optimizations).
255
256            -DCMAKE_INSTALL_PREFIX=<prefix>
257               The installation <prefix> where the program is installed.
258               The default is to install in /usr/local.
259
260          Or type "ccmake .." (if you have it - text-mode GUI). It may be blank so hit
261           'C' to first-time configure. Fiddle with yer options if ye so desire, then hit
262           'C' to configure then 'G' to generate and exit, or 'Q' to quit without
263           generating.
264
265          Or there is also a desktop GUI for cmake called cmake-gui.
266
267          Normally MusE builds its many internal modules as SHARED libraries and the
268           executable file is small but it links to all those libraries.
269          There is a special flag for building MusE as a more or less 'monolithic'
270           application (one big executable) which forces MusE to build most modules
271           as STATIC libraries and join them all in the final executable:
272           -DMODULES_BUILD_STATIC
273
274          --------------------------------
275            *** NOTICE TO PACKAGERS: ***
276          --------------------------------
277
278          Some packagers of software like to ensure that there are no unresolved symbols
279           in ANY shared libraries in the software, for example by using:
280           -DCMAKE_SHARED_LINKER_FLAGS=-Wl,--no-undefined
281
282          When using such flags, the -DMODULES_BUILD_STATIC flag
283           MUST BE ALSO BE SUPPLIED otherwise there will be many unresolved symbol errors.
284
285        Compiling:
286        ----------
287          After configuration, while still in the build directory,type:
288            make
289
290        Installing:
291        ----------
292          After compiling, type:
293            make install (as root)
294           or
295            sudo make install
296
297  =============================
298      Running MusE:
299  =============================
300
301      Recommended setup:
302      ------------------
303        MusE is a realtime program which requires special rights to work properly.
304
305      - Check if you are running a sufficiently new linux kernel > 2.6.x
306        A modern, standard destop kernel should suit virtually all needs.
307        For even stricter realtime performance a so-called 'low latency'
308         or 'realtime' kernel may be available. Check your distro's packages
309         for availability.
310
311      - create an "audio" group if it does not already exists
312        and put yourself into this group
313
314      - For realtime priority, you may want to ensure either the file:
315           /etc/security/limits.conf
316         or
317           /etc/security/limits.d/audio.conf
318         contains:
319           @audio   -  rtprio     95
320           @audio   -  memlock    unlimited
321
322        Some distros have a graphical menu or tool which does this for you.
323
324      - Start jack, typically by using the qjackctl application.
325        MusE can also be run without Jack. MusE will use a dummy audio
326         driver if Jack is not detected, or the -a option is given.
327
328
329      Running:
330      ------------------
331        start MusE by typing:
332            muse4 <options>
333
334          Some <options> are (complete list is printed by running muse4 -h):
335            -h       help
336            -v       print version
337            -d       debug mode: no threads, no RT
338            -D       debug mode: enable some debug messages
339                                  specify twice for lots of debug messages
340                                  this may slow down MusE massively!
341            -m       debug mode: trace midi Input
342            -M       debug mode: trace midi Output
343            -s       debug mode: trace sync
344            -a       no audio
345            -A       Force inclusion of ALSA midi even if using Jack
346            -P  n    set audio driver real time priority to n
347                      (Dummy only, default 40. Else fixed by Jack.)
348            -Y  n    force midi real time priority to n (default: audio driver prio +2)
349            -p       don't load LADSPA plugins
350            -I       don't load DSSI plugins
351            -L       don't use LASH
352            -l  xx   force locale to the given language/country code
353                      (xx = de,en,es,fr,pl,ru,sv_SE)
354
355      (JACK and all its clients (qjackctl & MusE) must run with the
356      same user id)
357
358
359      Startup troubleshooting tips:
360      -----------------------------
361
362      - Some rare distros might not load the alsa sequencer module by default.
363        If necessary, load the alsa sequencer module with:
364            /sbin/modprobe snd-seq
365
366      - Timer accuracy for ALSA support:
367
368        If ALSA support is enabled, a reliable source of timing is
369         desired for playback of midi notes.
370
371        By default, the timer is attempted to run at 1024 Hz (ticks/second).
372
373        MusE will try the Real Time Clock (RTC) first.
374        If that fails it will try ALSA timers instead - typically the
375         ALSA High Resolution (HR) timer or the ALSA system timer.
376
377        The RTC is recommended, with sufficient permissions, for best accuracy.
378
379        To ensure you have permissions to use the RTC, on modern systems
380         using udev rules, create this file if it does not exist:
381           "/etc/udev/rules.d/40-timer-permissions.rules"
382         and add the following lines to the file:
383           KERNEL=="rtc0",GROUP="audio"
384           KERNEL=="hpet",GROUP="audio"
385         and, as stated in "Recommended setup" above, ensure you are
386          part of the audio group.
387
388        (The hpet is not supported, but that line can help other applications.)
389
390        It is possible to use the ALSA system timer instead of the RTC,
391         but it usually requires a kernel built with a 1000 Hz system timer
392         (low-latency, realtime, or custom kernel as in "Recommended setup" above).
393        With most desktop kernels, the system timer is limited to 250 Hz,
394         while the HR timer is limited to 1000 Hz.
395        On such distros, without modification, MusE should end up picking
396         the 1000 Hz HR timer.
397
398        But if you set your RTC as above, you can run even higher rates.
399        See the Global Settings dialog for user-adjustable high rates.
400
401        Run MusE in a terminal to see what it picks. -D option gives more info.
402
403
404        (The following is old information! But may work for those without udev.)
405        Make sure you can access the realtime clock (RTC)
406            chmod 660 /dev/rtc
407            chgrp audio /dev/rtc
408        Make sure MusE can set the rtc clock:
409            echo 8192 > /proc/sys/dev/rtc/max-user-freq
410            inspect with:
411            cat /proc/sys/dev/rtc/max-user-freq
412
413  =============================
414      Known bugs:
415  =============================
416
417      The odd wierdness happens and some things may not be completely implemeneted
418      though we hope it is as stable for you as it is for us!
419
420      If you differ in this opinion we are grateful for all reported issues.
421
422      See the bug tracker for a better view of issues
423      https://github.com/muse-sequencer/muse/issues
424
425
426
427====================================================================
428Let us know whether MusE works for you !!!
429Have a look at the webpage https://muse-sequencer.github.io/ for details.
430
431
432

README.developer

1MusE is really not big on making developers do it the MusE way.
2For good and bad (probably mostly bad) it's a bit of happy anarchy out there.
3But whatever, it's a labor of love.
4
5Anyway, maybe some things should be a bit more clearly defined so I started this
6document with some pointers for best practices and procedures.
7
8* STYLE *
9whatever floats your boat. Okay, maybe try to keep it atleast somewhat consistent :)
10
11* TOOLS *
12MusE is highly dependent on Qt, mostly this is a good thing, especially as we want to
13make MusE even more portable. So, when implementing stuff that requires some support
14library, do check if Qt can provide the necessary functionality. Many times it can.
15
16* DEVELOPMENT *
17
18
19* RELEASE PROCEDURE *
20When making a release there are some steps that should always be done to make the
21packaging consistent and traceable.
22
231. make sure that version info is updated.
24   CMakeLists.txt:SET(MusE_VERSION       "3.0.0pre1")
25   CMakeLists.txt:SET(MusE_VERSION_FULL  "3.0.0pre1")
26
272. add a release-line to the ChangeLog (search for old ones for some format hints)
28
293. commit everything to git
30
314. now create the tarball from the build dir (could be a good idea to create a new build dir)
32   $ make clean (otherwise the tarball will way too big)
33   $ make package_source
34   feel free to ctrl-c out of this as soon as the .tar.gz build is done as it contines to make
35   a lot of variants that we do not use.
36
375. verify that the built package has the right name and can be built
38
39   NOTE: if you are making a point release (e.g. 3.0.1) the file name is based of the path so
40   the package will be called muse-3.0.tar.gz while it really should be muse-3.0.1. Easiest
41   way to fix this (for now) is to untar the package, rename the folder (in this case) from
42   muse-3.0 to muse-3.0.1 and tar it back into muse-3.0.1.tar.gz.
43
446. make a tag in git for this particular checkin when you are satisfied the release is correct
45   From 4.0 release we use https://semver.org/ formatted tags.
46   For instance 4.0 pre release 2 is 4.0.0-pre2.
47   'git tag -l' lists all of the previous tags.
48   Use git tag -a <tag name> to create an annotated tag.
49   To push the tag to master: git push --tags
50
517. create a releasenote
52
538. upload both releasenote and tarball to the sourceforge page (or whatever is in fashion when
54   it's time).
55   Update: Currently we upload to both sourceforge (because we always have and it's not a lot of work)
56   and to the Releases page on github.
57
589. Update the frontpage and news page at https://muse-sequencer.github.io/.
59   The frontpage is html and resides a specific git repo.
60   The news page is in the muse github wiki.
61
6210.Update wikipedia to reflect the new release.
63
6411. send out a release mail
65

README.developer.undo_system

1V 0.0.1 03/26/2020 By Tim.
2
3
4A mini review of the Operations and Undo system in MusE.
5========================================================
6
7Operations:
8------------
9
10During each audio cycle segment, a realtime audio thread
11 processes audio and midi.
12
13A block of audio and midi events are gathered to be played
14 in the next segment to various outputs, while a block of
15 incoming audio and midi events from the last segment are
16 recorded from various inputs.
17
18Various containers house all the audio and midi events
19 in a song, from which the realtime process thread gathers
20 the required events for the next playback segment.
21
22When it is desired to alter the contents of the various
23 containers which house all audio and midi events, and
24 to do so from a thread other than the realtime thread,
25 for example the GUI thread, the actual change must be
26 synchronized with and take place in the realtime audio
27 thread, otherwise these concurrent accesses will crash.
28
29In a realtime audio thread it is forbidden to use code
30 that may block or wait or take a long time, such as
31 mutexes, memory allocations, or printing functions.
32
33So MusE does not use any mutexes or locks of any kind
34 in the realtime thread. Instead it uses synchronized
35 OPERATIONS to make desired changes in the realtime
36 process callback just before audio and midi are processed.
37
38Example: To change a note in a list of notes in a song
39 from inside a GUI dialog, an OPERATION is requested,
40 and the GUI thread will pause while the realtime thread
41 executes the request. The GUI thread resumes when the
42 OPERATION is done.
43
44Note that it is possible the realtime audio thread may NOT
45 be running in realtime, for example if the audio system
46 is not set up for realtime. MusE is fairly tolerant of
47 that, but it is possible the audio thread may not finish
48 before the GUI thread runs again, which may cause a
49 concurrency crash if some list was being changed.
50This is why realtime is important and why it is important
51 to try to make changes as quickly as possible in the audio
52 thread in case the thread is not realtime - if the changes
53 are taking a long time in the audio thread, the GUI thread
54 might run.
55
56
57Undo/redo:
58----------
59
60It is desirable to have an undo/redo for many OPERATIONS.
61And yet, not all OPERATIONS can be or need to be undoable.
62
63So for many OPERATIONS, the request is sent to the UNDO system,
64 instead of directly to the OPERATIONS system. The UNDO system
65 remembers the OPERATION so that it can be undone and redone.
66
67Still, some requests are sent directly to the OPERATIONS system,
68 bypassing the UNDO system.
69
70In addition, the UNDO system has the ability to process some
71 requests WITHOUT remembering them for undoing, basically
72 passing them on to the OPERATIONS system.
73This is convenient for example when a list of UNDO OPERATIONS
74 contains some OPERATIONS that should not be undoable. This
75 eases the caller's composition of lists of requests, using
76 only the UNDO system instead of working both the UNDO and
77 OPERATIONS systems.
78
79The UNDO system has a few tricks. It can combine previously
80 executed commands into one list. It can reduce repeated
81 similar commands to just one, such as when operating a mouse
82 to adjust some value - only the last value at mouse-up is stored
83 instead of storing hundreds of values in hundreds of commands.
84
85
86Operations vs. Undo Operations
87-------------------------------
88
89A distinction should be made between OPERATIONS and UNDO OPERATIONS:
90Although the UNDO system takes requests and composes and executes
91 OPERATIONS, UNDO requests are not the same as OPERATION requests.
92The caller does not pass OPERATION requests to the UNDO system,
93 the caller passes UNDO OPERATIONS. Owing to the different nature
94 of the two systems, the composition and structure of the requests
95 is different. For example OPERATIONS system has the ModifyTempoList
96 OPERATION, but the UNDO system has AddTempo DeleteTempo and ModifyTempo
97 UNDO OPERATIONS.
98
99
100Stages:
101-------
102
103Both the OPERATIONS and UNDO systems work in STAGES:
104
105* OPERATIONS system:
106The OPERATIONS system has two STAGES: A REALTIME STAGE followed by
107 a NON-REALTIME STAGE.
108
109The idea is that the caller composes an OPERATION beforehand in the
110 GUI thread, then passes it to the OPERATIONS system where any
111 realtime-sensitive changes occur in the REALTIME STAGE, followed by
112 any non-realtime-sensitive code in the NON-REALTIME STAGE such as
113 cleanups, safe deletion of memory no longer used, etc.
114
115* UNDO system:
116The UNDO system has three STAGES: A NON-REALTIME STAGE (1), followed
117 by a REALTIME STAGE (2) which basically just calls the OPERATIONS
118 system REALTIME STAGE, followed by a NON-REALTIME STAGE (3) which
119 basically just calls the OPERATIONS system NON-REALTIME STAGE.
120
121The UNDO system NON-REALTIME STAGE (1) is a convenient place where any
122 non-realtime-sensitive code can by run BEFORE the REALTIME STAGE.
123It offers a place to compose complex preparations for a request
124 instead of the caller having to do it, trying to make the caller's
125 job as simple as possible. For example memory allocation.
126The OPERATIONS system has no such STAGE. The caller must compose
127 the OPERATION and handle any allocation etc. although the system's
128 NON-REALTIME STAGE can be used to cleanup, deallocate etc.
129
130
131Altering lists vs. swapping them out quickly:
132---------------------------------------------
133
134In the OPERATIONS system's realtime code, the idea is to execute
135 only the bare minimum code required to make the changes. Such as
136 inserting in a list, or calling erase with an iterator that was
137 already found in the GUI thread so that erase is 'ready to go'.
138Before the OPERATIONS system was added, the UNDO system handled
139 all of this, but it was ALSO executing some awfully heavy code.
140
141But even though those list insert/erase techniques are as tight
142 as they can be, they STILL may allocate or de-allocate memory,
143 which is not realtime safe !
144
145
146One way to guarantee very fast changes to containers (fixed time)
147 is to completely swap them with another list, composed beforehand
148 with the desired changes.
149If the container happens to be a pointer-to, the pointer can be
150 quickly, even atomically, swapped with another pointer-to,
151  guaranteeing no hiccups or xruns in the processing.
152If the container is NOT a pointer-to, unfortunately there is no
153 pointer to swap, since the container is the object.
154However some containers have a swap() method which has very fast
155 fixed-time complexity, which really helps in this situation.
156
157Note with this technique, the UNDO system does NOT store a copy
158 of the container for each UNDO OPERATION in the UNDO history.
159The UNDO system only stores the necessary CHANGES, saving memory.
160When an actual Undo is performed, only then is a new replacement
161 list composed based on those changes, and then swapped out with
162 the original.
163
164
165Several OPERATIONS have now been switched over to this technique.
166One caveat and inefficiency is that with a very large container
167 needing only a simple change, you will be making a copy of it,
168  albeit only for a brief time until swapped.
169
170
171Tempo, time signature, key, and other special operations:
172---------------------------------------------------------
173
174These three tempo, sig and key areas have very special needs
175 due to how these containers operate. The code is somewhat complex.
176
177In addition certain other operations have special needs and have
178 more complex code.
179

README.ladspaguis

1MusE can create LADSPA GUI's (graphical user interfaces) from
2Qt designer *.ui files at runtime.
3This allows a user to create or modify customized LADSPA guis without
4recompiling MusE.
5
6======================
7   Installation
8=====================
9
10Copy the file muse/widgets/musewidgetsplugin.so into a directory were
11Qt (designer) can find it.
12
13Example:
14      if you installed Qt in /usr/qt3:
15      su -c "cp -af musewidgetsplugin.so /usr/qt3/plugins/designer"
16Check:
17      After starting the Qt designer you see all MusE specific widgets
18      under Tools/MusE. If you cannot find any MusE widgets, designer
19      did not find the file "musewidgetsplugin.so".
20
21======================
22   Environment
23======================
24
25Naming:
26      The Qt designer files are named after the LADSPA plugin ID.
27      Example: the "freeverb" plugin has the id "1050". A gui for
28            freeverb has to be named "1050.ui".
29      The plugin ID is shown in the MusE plugin browser.
30
31Path:
32      MusE looks for *ui files at (museglobalshare)/plugins/.
33      If you installed MusE at "/usr" (configured with --prefix=/usr)
34      MusE looks at "/usr/share/muse/plugins" for *ui files.
35
36======================
37   Creating *.ui file
38======================
39
40The association between LADSPA plugin parameters and Qt-Widgets is
41done by name. All input widgets which manipulate a LADSPA parameter
42must have a name starting with the letter "P" followed by the parameter
43index.
44      Example:
45      A "Slider" widget which manipulates the 3th parameter of a
46      plugin has the name "P3slider".
47
48Supported Widgets:
49      "Slider"       slider for float values
50      "DoubleLabel"  entry for float values
51      "QCheckbox"    to manipulate a on/off LADSPA parameter
52      "QComboBox"    select from a list of named values; sets
53                     integer LADSPA values
54
55(for more hints please look at the example *.ui files)
56
57

README.softsynth

1=============================================================
2      Short instructions to get the soft
3      synthesizer up and running
4=============================================================
5
61. Compile and install MusE
7
83. Run MusE from an xterm with Option "-D";
9   look at the debug output in the xterm; you should see something
10   like:
11
12      3 soft synth found
13      found soft synth <fluid> <fluid soft synth>
14      found soft synth <organ> <organ soft synth>
15      found soft synth <S1> <organ soft synth>
16
17
184. Configure Software Synthesizer
19
20   Open Settings->MidiPorts/SoftSynth.
21
22      - select a software synthesizer
23      - press "Add Instance" to create an istance of this
24        synthesizer; the synthi shows up in the list
25        of instances with a unique name
26
275. Configure Midi Port
28
29   To use the synthesizer instance you must
30   connect it to a MusE midi port:
31
32      - click into the "Device Name" column of an empty midi port
33        (Device Name == "none")
34      - select the synthesizer from the dropdown menu.
35
36   This connects the synthesizer to the selected midi port.
37   The instrument type is automatically set.
38
396. Open the Audio Mixer
40
41      You see a new mixer strip of type "Synthi" and the name
42      of the new created synthesizer instance.
43
44      Route the audio output of this strip to "Output".
45      (per default the synthesizer is routed to the first Output strip)
46
477. Now you are ready to play with the "organ" synthesizer
48
49      - create midi track
50      - set the midi port to the synthesizer port
51      - click the "R" column in the tracklist to enable "Recording"
52
538. Optional: open Configure->MidiPorts and click in column GUI
54   to show a GUI for the synthesizer instance.
55      There is no gui available for the S1 synth.
56      The iiwu gui enables you to enter a different sound font.
57      The organ gui has some "draw bars" to let you play with
58      sounds in real time.
59
60These are the software synthesizers currently available:
61
62      - S1  a simple sythesizer skeleton as a guide for all who
63        want to code their own one:
64            - only one tone at a time
65            - simple sinus wave form
66            - no gui
67        The synthi may be used as a metronome.
68
69      - organ, an adapted version of the LADSPA plugin
70        "Organ - Additive Organ Synthesizer Voice" from
71        David A. Bartold
72
73        "organ" implements a gui connected bidirectional
74        to the synth via stdin/stdout
75
76      - fluid, is the adapted version of Peter Hanappe´s
77        sample based fluid synthesizer (formerly known as iiwu)
78            - loadable sound fonts
79            - multi timbral
80            - 128 voices
81            - simple gui lets you load a different sound font
82        Fluid loads a default sound font determined by the
83        environment variable "DEFAULT_SOUNDFONT".
84
85
86
87

README.vstsdk

1=============================================================
2      Short instructions for compiling MusE
3      with native Steinberg VST SDK
4=============================================================
5
6By default MusE utilizes the VESTIGE compatibility headers for VST support, it is however
7possible to compile with Steinbergs SDK for some possible improvements (vst chunks has
8been implemented so I actually don't know if there is any reason to use the VST SDK anymore)
9
10To fulfill the requirements for this follow these steps:
111. download and extract vstsdk (last it was seen here: http://www.steinberg.net/en/company/developers.html)
122. find the folder containing aeffectx.h (usually it's under <sdk>/pluginterfaces/vst2.x/
133. Edit the aeffect.h and change
14#define VST_2_4_EXTENSIONS 1
15to
16#define VST_2_4_EXTENSIONS 0
174. Configure MusE to disable VESTIGE and point to the SDK HEADERS, for instance with adding these
18   arguments to the cmake commandline:
19   cmake -DENABLE_VST_VESTIGE=OFF -DVST_HEADER_PATH=<pathtosdk>/pluginterfaces/vst2.x/
20   Note that by default the sdk extracts into a folder with spaces, this may work badly,
21   safest to rename the path without spaces.
225. run cmake, make and make install as you usually would.
23
24
25

README.win32

1# Building MusE on Windows.
2
3The file is named win32 though it extends to windows in general but the word Windows is just too ambiguous.
4
5There is a thread in the forum with the most recent effort to bring Windows support to MusE:
6https://linuxmusicians.com/viewtopic.php?f=61&t=19353
7
8Be warned that the Windows build of MusE is work-in-progress and is mostly of interest to tinkerers that wish
9to pursue this effort.
10
11## Instructions
12
13The following steps allow native Muse (git) compilation under Windows with the mingw64 compiler. Optional steps or alternatives are commented out.
14It is available in it's original formatting here:
15    https://musicsecrets.euniversity.pub/muse.html
16
17    Support files:
18
19        Required dependencies
20        Fix make paths script (place it in muse/src)
21        Compile components script (place it in muse/src)
22        Compile Muse script (place it in muse/src)
23        Pack script (TODO)
24
25
26    1. Install msys2 from http://www.msys2.org/ in a short path (i.e. f:/a)
27    # From the msys2 terminal
28    pacman -Syu
29    # Close the msys2 terminal and open it again
30    pacman -Su
31
32    2. From mingw64 shell from now on, install common packages:
33    pacman -S \
34    mingw-w64-x86_64-toolchain \
35    python3 \
36    python3-setuptools \
37    mingw-w64-x86_64-python3 \
38    mingw-w64-x86_64-python3-setuptools \
39    python2 \
40    python2-setuptools \
41    pkg-config \
42    mingw-w64-x86_64-pkg-config \
43    autoconf \
44    automake \
45    perl \
46    gtk-doc \
47    flex \
48    bison \
49    patch \
50    libtool \
51    mingw-w64-x86_64-libtool \
52    wget \
53    git \
54    nasm \
55    mingw-w64-x86_64-nasm \
56    dos2unix \
57    mingw-w64-x86_64-cmake
58
59    3. Install pre-built dependencies
60    pacman -S \
61    base-devel \
62    mercurial \
63    cvs \
64    p7zip \
65    ruby \
66    mingw-w64-x86_64-qt5 \
67    mingw-w64-x86_64-ladspa-sdk \
68    mingw-w64-x86_64-libsndfile \
69    mingw-w64-x86_64-libsamplerate \
70    mingw-w64-x86_64-fluidsynth \
71    mingw-w64-x86_64-gtkmm \
72    mingw-w64-x86_64-dlfcn
73
74    # Build the following packages with these commands in /usr/src:
75    cd /usr/src
76    cd #PACKAGE_DIR#
77    makepkg-mingw -g >> PKGBUILD
78    makepkg-mingw
79    pacman -U *.pkg.tar.xz
80    cd ..
81
82    mingw-w64-liblo
83    mingw-w64-serd
84    mingw-w64-sord
85    mingw-w64-lv2
86    mingw-w64-sratom
87    mingw-w64-lilv
88    mingw-w64-portaudio
89    mingw-w64-jack
90
91    4. Build Muse
92    cd /usr/src
93    git clone --recurse-submodules -b master git://github.com/muse-sequencer/muse.git
94    cd /usr/src/muse/src
95    export LIBRARY_PATH=/mingw64/lib
96    export CPATH=/mingw64/include
97    # Copy here the files compile_muse_mingw.sh and CMakeLists.txt
98    ./compile_muse_mingw.sh
99
100    5. Pack files (TODO)
101    # Place muse_pack.sh in /usr/src
102    ./muse_pack.sh
103
104