|
Name |
|
Date |
Size |
#Lines |
LOC |
| .. | | 03-May-2022 | - |
| al/ | H | 03-May-2022 | - | 2,129 | 1,355 |
| audio_convert/ | H | 03-May-2022 | - | 5,229 | 3,763 |
| awl/ | H | 03-May-2022 | - | 8,467 | 4,916 |
| cmake/ | H | 24-Apr-2021 | - | 240 | 202 |
| demos/ | H | 03-May-2022 | - | 378 | 377 |
| doc/ | H | 03-May-2022 | - | 2,582 | 2,224 |
| grepmidi/ | H | 03-May-2022 | - | 365 | 283 |
| libs/ | H | 03-May-2022 | - | 20,332 | 14,292 |
| man/ | H | 03-May-2022 | - | 148 | 106 |
| muse/ | H | 03-May-2022 | - | 319,299 | 227,615 |
| packaging/ | H | 03-May-2022 | - | 429 | 327 |
| plugins/ | H | 03-May-2022 | - | 2,078 | 1,210 |
| qss/ | H | 24-Apr-2021 | - | 40 | 38 |
| sandbox/ | H | 03-May-2022 | - | 335 | 213 |
| share/ | H | 03-May-2022 | - | 295,023 | 287,241 |
| svg/projects/ | H | 03-May-2022 | - | | |
| synti/ | H | 03-May-2022 | - | 254,472 | 235,763 |
| utils/ | H | 03-May-2022 | - | 858 | 633 |
| vestige/ | H | 24-Apr-2021 | - | 321 | 207 |
| windows/ | H | 03-May-2022 | - | | |
| xpm/ | H | 03-May-2022 | - | 11 | 9 |
| AUTHORS | H A D | 24-Apr-2021 | 3.5 KiB | 83 | 69 |
| COPYING | H A D | 24-Apr-2021 | 15 KiB | 289 | 241 |
| ChangeLog | H A D | 24-Apr-2021 | 519.3 KiB | 8,299 | 8,207 |
| Doxyfile.in | H A D | 24-Apr-2021 | 5.8 KiB | 151 | 150 |
| LICENSE | H A D | 24-Apr-2021 | 25 | 3 | 1 |
| README | H A D | 24-Apr-2021 | 15.5 KiB | 432 | 319 |
| README.developer | H A D | 24-Apr-2021 | 2.7 KiB | 65 | 46 |
| README.developer.undo_system | H A D | 24-Apr-2021 | 7.2 KiB | 179 | 137 |
| README.ladspaguis | H A D | 24-Apr-2021 | 1.9 KiB | 57 | 45 |
| README.softsynth | H A D | 24-Apr-2021 | 2.8 KiB | 87 | 61 |
| README.vstsdk | H A D | 24-Apr-2021 | 1.2 KiB | 25 | 20 |
| README.win32 | H A D | 24-Apr-2021 | 2.7 KiB | 104 | 87 |
| SECURITY | H A D | 24-Apr-2021 | 9.2 KiB | 254 | 180 |
| compile_components_ui.pl | H A D | 24-Apr-2021 | 662 | 24 | 15 |
| compile_muse.sh | H A D | 24-Apr-2021 | 1.3 KiB | 36 | 8 |
| compile_muse_mingw.sh | H A D | 24-Apr-2021 | 1.4 KiB | 37 | 8 |
| config.h.in | H A D | 24-Apr-2021 | 2.2 KiB | 65 | 60 |
| find_manual_plural.sh | H A D | 24-Apr-2021 | 721 | 21 | 4 |
| find_translation_concatenation.sh | H A D | 24-Apr-2021 | 467 | 17 | 4 |
| fix_make_paths.pl | H A D | 24-Apr-2021 | 1.7 KiB | 45 | 35 |
| libdivide_LICENSE | H A D | 24-Apr-2021 | 2.4 KiB | 56 | 42 |
| resources.qrc | H A D | 24-Apr-2021 | 8.8 KiB | 219 | 218 |
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