--- /dev/null
+[Note to uninitiated readers. This is a Q&A document that explains
+what to watch out for when submitting scores for the Mutopia project.
+The Mutopia project is an effort to accumulate an archive of sheet
+music that is in the public domain. The project should be similar to
+the Gutenberg project.
+
+We will be using music typesetting software to produce the software.
+The project will only accept music for composers that have passed into
+the PD. The sole remaining problem is caused by the editorial
+changes. A recent edition may contain editorial amendments that are
+not in the PD, so we cannot simply copy the music from recent
+editions.]
+
+
+
+What is copyright?
+
+Copyright is a legal system that protects the expressions of ideas.
+It was originally conceived to foster development of art and
+knowledge.
+
+Copyright law gives "owners" of the expressions the right to restrict
+reproductions of these expressions and collect fees. In this way they
+can earn a living. For example, a poet may restrict xeroxing and
+public performances of his poems, and demand a fee for print for
+prints and performances.
+
+After some time ---for most forms of expression, this is 70 years
+after the author died--- the work goes into the public domain, which
+means that all restrictions are lifted. You can print, perform and
+modify the works as much as you like.
+
+Copyright law is internationalised. In most countries the conditions
+from the Berne convention have been adopted.
+
+
+
+
+How does copyright work for music scores?
+
+Let's analyze how a printed score is produced:
+
+1. The composer composes music.
+
+2. An editor edits the music, based on the composer's manuscript and
+on other editions.
+
+3. An engraver lays out the editor's product.
+
+As you can see, there are three individuals, whose expressions are
+protected by copyright law. Since we are interested in the scores
+that are in the PD.
+
+The copyright on the music itself passes into the PD 70 years after
+the death of the composer. (Or XXXX years after publication if the
+work is published posthumously.)
+
+The copyright on the editorial changes pass in to the PD 70 years
+after death of the editor, or XXX years after publication. Depending on YYY
+
+The copyright of the engraver is of no interest to us, since we will
+not reproduce any of the layout.
+
+
+
+What are editorial changes?
+
+
+
+
+
+
+How do I find out what changes might be copyrighted?
+
+You cannot copyright something you did not create yourself. So if you
+find the same editorial changes across different editions it is
+unlikely that it is copyrighted.
+
+
+
+
+Urtexts?
+
+
+
+Scores that are not marked with dates?
+
+
you do some hacking, we appreciate it if you would follow this rules,
but if you don't, we still like you.
-Functions and methods do not return errorcodes, but use assert for
-checking status.
+Functions and methods do not return errorcodes.
quote(
verb(
This_is_a_class
- AClass_name (for Abbreviation_class_name)
)
nsubsect(MEMBERS)
nsect(HUNGARIAN NOTATION NAMING CONVENTION)
Proposed is a naming convention derived from the so-called
-em(Hungarian Notation).
-
-nsubsect(Hungarian)
-
-The Hungarian Notation was conceived by or at least got its name from,
-the hungarian programmer Charles Simonyi. It is a naming convention
-with the aim to make code more readable (for fellow programmers), and
-more accessible for programmers that are new to a project.
-
-The essence of the Hungarian Notation is that every identifier has a
-part which identifies its type (for functions this is the result
-type). This is particularly useful in object oriented programming,
-where a particular object implies a specific interface (a set of
-member functions, perhaps some redefined operators), and for
-accounting heap allocated memory pointers and links.
-
-nsubsect(Advantages)
-
-Another fun quote from Microsoft Secrets:
-
-quote(
- The Hungarian naming convention gives developers the ability
- to read other people's code relatively easily, with a minmum
- number of comments in the source code. Jon De Vann estimated
- that only about 1 percent of all lines in the Excel product
- code consist of comments, but the code is still very
- understandable due to the use of Hungarian: "if you look at
- our source code, you also notice very few comments. Hungarian
- gives us the ability to go in and read code..."
-)
-
-Wow! If you use Hungarian you don't have to document your software!
-Just think of the hours I have wasted documenting while this "silver bullet"
-existed. I feel so stupid and ashamed! (Didn't MMM-Brooks say `There is
-no silver bullet?' --HWN)
-
-
-nsubsect(Disadvantages)
-
-itemize(
-it()more keystrokes (disk space!)
-it()it looks silly code(get_slu_p())
-it()it looks like code from micro suckers
-it()(which) might scare away some (otherwise good?)
- progammers, or make you a paria in the free
- software community
-it()it has ambiguities
-it()not very useful if not used consistently
-it()usefullness in em(very large) (but how many classes is very large?)
- remains an issue.
-)
-
-nsubsect(Proposal)
-
-itemize(
-it()learn about cut and paste / use emacs or vi
- or lean to type using ten fingers
-it()Use emacs dabbrev-expand, with dabbrev-case-fold-search set to nil.
-it()use no, or pick less silly, abbrvs.
-it()use non-ambiguous postfixes code(identifier_name_type_modifier[_modifier])
-it()There is no need for Hungarian if the scope of the variable is small,
- ie. local variables, arguments in function definitions (not
- declarations).
-)
-
-Macros, code(enum)s and code(const)s are all uppercase,
-with the parts of the names separated by underscores.
+em(Hungarian Notation). Macros, code(enum)s and code(const)s are all
+uppercase, with the parts of the names separated by underscores.
nsubsect(Types)
STEPMAKE_TEMPLATES=documentation
README_TOP_FILES=NEWS DEDICATION TODO ANNOUNCE-0.1 AIMS
INFO_FILES = $(wildcard $(outdir)/$(package).info*)
+EXTRA_DIST_FILES = COPYRIGHT
-
article(links - Links to other related websites)(HWN and JCN)()
sect(DESCRIPTION)
description(
dit(lurl(http://www.cs.uu.nl/people/hanwen/lilypond/))Han-Wen's site.
-dit(lurl(http://www.xs4all.nl/~jantien/lilypond/))Jan's site.
dit(lurl(http://sca.uwaterloo.ca/lilypond/))The canadian mirror
(thanks, Eric!)
)
description(
dit(lurl(http://www.gnu.org/))
- LilyPond is part of the GNU Project started by the Free Software
- Foundation to create a system of free software for the world-community
+ LilyPond is part of the GNU Project. The GNU project is the name
+ of Richard Stallman's effort to create a freely available
+ system of software.
dit(lurl(http://www.zib.de/Visual/software/doc++/index.html))
The documentation system for C++ sources, which is used for the
LilyPond sources.
An enormous collection of music related URLs
dit(lurl(http://www.ram.org/ramblings/philosophy/fmp.html))
Musings on free music, plus hints how to record your own (free) music.
-
dit(lurl(http://www.geocities.com/Vienna/Studio/1714/))
John Sankey has taken up the task of recording classical
-music, and distributing the results at no cost.
+ music, and distributing the results at no cost.
)
-
sect(Ftp)
-We will upload major releases to the following sites:
-
-description(
-dit(lurl(ftp://metalab.unc.edu/pub/Linux/apps/sound/convert))
- The GNU/Linux FTP site
-
-dit(lurl(ftp://ftp.dante.de/tex-archive/support/lilypond))
- An ftp site which is in CTAN. CTAN is a worldwide network of
- sites full of TeX() stuff.
-
-dit(lurl(ftp://ftp.redhat.com/pub/contrib/))
- The FTP site of RedHat Software.
-)
-
-At this moment we have about one development-patchlevel per week.
-These development releases will also be at
+At this moment we have about one development-patchlevel per week.
+These development releases will be at
itemize(
it()lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond/development)
it()lurl(ftp://sca.uwaterloo.ca/pub/lilypond)
-it()[your mirror here]
+it()lurl(ftp://ftp.lilypond.org/pub/lilypond)
)
Debian releases are located at
dit(lurl( http://sound.condorow.net))
Dave Philips' Linux sound applications page
dit(lurl(http://www4.smart.net/~jcovey/scores.html))
- Jeff Covey's guitar music=
+ Jeff Covey's guitar music
dit(lurl(http://www.home.fh-karlsruhe.de/~rost0001/web/musik/musik.html))
Stochastic composing using LilyPond
dit(lurl(http://www.medieval.org/emfaq/scores/software.html))
More software for (early) music.
-dit(lurl(http://www.emry.net/webwatcher/))
- The Linux webwatcher: this site logs changes in important Linux sites.
dit(lurl(http://www.pbm.com/~lindahl/ravenscroft/modern))
Transcriptions of the music of Thomas Ravenscroft, partly using
LilyPond
manpage(LilyPond)
(1)
- (1998)
+ (1999)
(The LilyPond package)
(The GNU Project Music Typesetter)
manpageoptions()
description(
-dit(-I,--include=FILE)
+dit(-I,--include=)
add file(FILE) to the search path for input files.
dit(-M,--midi)
- This disables TeX output. If you have a \midi definition, it will do the
+ Disable TeX output. If you have a \midi definition, it will do the
midi output only.
dit(-d,--dependencies)
Also output rules to be included in Makefile.
dit(--include, -I=DIRECTORY)
Add file(DIRECTORY) to the search path for input files.
dit(--ignore-version, -V)
- Make incompatible mudela version non-fatal.
+ Make the incompatible mudela version warning non-fatal.
)
manpagesection(FEATURES)
customizable notenames, customisable fontset.
it()MIDI output lets you check if you have entered the correct notes.
it()MIDI to Mudela conversion through the mi2mu program.
-it()Multiple staffs in one score. Each staff can have different meters.
+it()Multiple staffs in one score. Each staff can have different time signatures.
it()Beams, slurs, ties, chords, super/subscripts (accents and text)
triplets, general n-plet (triplet, quadruplets, etc.), lyrics,
- transposition dynamics (both absolute and hairpin style).
+ transposition, dynamics (both absolute and hairpin style).
it()Multiple voices within one staff; beams optionally shared
between voices. Up to four voices is handled cleanly.
it()Multiple scores within one input file. Each score is output to
manpagesection(DISCLAIMER)
-GNU LilyPond is copyright 1996-1998 by its authors. GNU LilyPond is
+GNU LilyPond is copyright 1996-1999 by its authors. GNU LilyPond is
distributed under the terms of the GNU General Public License. GNU LilyPond
is provided without any warranty what so ever.
GNU LilyPond may be freely distributed. For further information consult
manpagesection(PROBLEMS)
-There is an extensive list of todoes and bugs. See file(TODO). If you
-have a problem you should try to find out
+There is an extensive list of todoes and bugs. See the file
+file(TODO) distributed with the sources. If you have a problem you
+should try to find out
itemize(
it()If the bug has been fixed in a newer release.
it()If the bug has been found earlier, consult file(TODO) and file(BUGS).
)
-If you have found a bug, then you should send a bugreport.
+If you have found a bug, then we would appreciate it if you sent a
+bugreport.
itemize(
it()Send a copy of the input which causes the error.
it()Send a description of the LilyPond version you use
(with compile/configure options please).
it()Send a description of the bug itself.
-it()Send it to email(bug-gnu-music@gnu.org) (you don't have to subscribe
- to this mailinglist).
+it()Send it to email(bug-gnu-music@gnu.org); you don't have to be subscribed
+ to this mailinglist.
)
manpagefiles()
description(
dit(file(init.ly))
The initialisation file with symbol tables etc. It
- includes files from the directory file(init/).
+ includes files from the directory
+ file(PREFIX/share/lilypond/ly/). (file(PREFIX) typically is file(/usr/local)
)
manspagesection(environment)
dit(LILYINCLUDE)
additional directories for finding lilypond data. The
format is like the format of file(PATH).
+dit(LILYPREFIX)
+ [FIXME]
dit(LANG)
selects the language for the warning messages of LilyPond.
)
manpageseealso()
+LilyPond comes with various other documentation files, but most are in
+the form of manual pages. They are included in the source
+package. Interesting documents include
+
description(
-dit(internals)
- On technical details of LilyPond
-dit(mudela-man)
- On the input format. This is a LilyPond-enhanced LaTeX document.
dit(MANIFESTO)
Goals of the GNU LilyPond project.
dit(FAQ)
The GNU LilyPond FAQ list
-dit(GNU url(LilyPond)(http://www.cs.uu.nl/people/hanwen/lilypond/index.html))
- has her own webpage. This webpage contains the MIDI, GIF and PS files for
- some standard music files. It also has the complete LilyPond documentation
)
-GNU LilyPond is
-updated very frequently, the latest version is always available at:
-lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond). This FTP site is mirrored
-at a number of sites; consult the project web pages for information
-about mirrors.
+A further source for information is the website, which can be found at
+lurl(http://www.lilypond.org/). The website contains on-line versions
+of the documentation
+
+
+GNU LilyPond is updated very frequently, the latest version is always
+available at: lurl(ftp://ftp.cs.uu.nl/pub/GNU/LilyPond). This FTP
+site is mirrored at a number of sites; consult the project web pages
+for information about mirrors.
For programs which are part of the GNU music project, the following
mailing list have been setup:
manpagesection(REMARKS)
GNU LilyPond has no connection with the music package Rosegarden, other
-than the names being similar (:-)
-
-manpagesection(HISTORY)
-cindex(History)
-
-(for a detailed changelog, see file(NEWS))
-
-GNU LilyPond's roots lie in MPP, a preprocessor to the rather arcane
-MusiXTeX macro package for TeX. A friend of mine, Jan Nieuwenhuizen
-wrote the first 44 versions (0.01 to 0.44), then his program caught my
-attention, and I was slowly sucked in to the interesting problem of
-easily producing beautifully printed music. I contributed some
-code. We soon realised that MPP's design was too fundamentally broken
-to be repaired, so it was decided to rewrite MPP. We debated a lot about
-the requirements to an inputformat (fall 1995). I sat down and started
-with a parser-first, bottom-up rewrite called mpp95 (which totally
-failed, obviously).
-
-After long and hard thinking, I came up with an algorithm for the
-horizontal spacing of multiple staffs (april 1996) I coded it (and did
-not test it). After starting with this fundamental piece, I slowly
-added the stages which come before spacing, and after. A half year
-later, I had a first working version, (october 1996). I announced
-Patchlevel 0.0.7 (or 8) to the mutex list after asking some technical
-details on spacing; it was downloaded approximately 4 times. Then I
-got the hang of it, and in the subsequent two months, I coded until it
-had doubled in size (pl 23).
-
-Most the other history is described in the NEWS file. The first large
-scale release (0.1) was done after approximately 78 patchlevels on
-August 1, 1997.
+than the names being similar :-)
manpageauthor()
cindex(Author)
-Please consult the documentation file file(AUTHORS.txt) for more detailed
-information, and small contributions.
-
itemize(
it()nemail(Han-wen Nienhuys)(hanwen@cs.uu.nl)
lurl(http://www.cs.uu.nl/people/hanwen)
it()nemail(Jan Nieuwenhuizen)(janneke@gnu.org)
lurl(http://www.xs4all.nl/~jantien)
)
+
+Please consult the documentation file file(AUTHORS) for more detailed
+information, and small contributions.
+
@Misc{igor,
title = {Igor},
author = {Technoligor AB},
- note = {Commercial music notation with bigwig supporters.
-Still in beta},
+ note = {Commercial music notation with bigwig supporters.},
html={http://www.igortech.pi.se/},
}
)
-Your name could be here! If you want to help, then take a look at the
-SMALLISH PROJECTS section of in the file file(TODO). Some do not involve
-coding C++
-
-[And of course we sincerely thank J.S.Bach, F.Schubert, T. Merula and
-W.A.Mozart for their beautiful music]
+Your name could be here! If you want to fix something, do it, and send
+us a patch!
(PPC, intel), FreeBSD, AIX, NeXTStep, IRIX, Digital Unix and
Solaris.
-it()Lots of disk space: LilyPond takes between 50 and 100 mb to
+it()Lots of disk space: LilyPond takes between 30 and 100 mb to
compile if you use debugging information. If you are short on
disk-space run configure with code(--disable-debugging).
NT/95/98 as well. See Section ref(w32).
it() EGCS 1.1 or newer.
-it() Python 1.5 (Strictly speaking, you shouldn't need Python for
- compiling and installing, but you'll need it to regenerate the font
- tables, e.g.).
-it() GUILE 1.3 (no, GUILE 1.2 won't work), check out lurl(http://www.gnu.org/software/guile/guile.html).
+
+it() Python 1.5,
+Check out
+lurl(ftp://ftp.python.org) or lurl(ftp://ftp.cwi.nl/pub/python).
+
+it() GUILE 1.3, check out lurl(http://www.gnu.org/software/guile/guile.html).
+
+it()GNU make.
+Check out lurl(ftp://ftp.gnu.org).
+
+it()Flex (version 2.5.4 or newer).
+Check out lurl(ftp://ftp.gnu.org).
+
+it()Bison (version 1.25 or newer).
+Check out lurl(ftp://ftp.gnu.org).
+
+it()Yodl. All documentation will be in Yodl. (1.30.17)
+lurl(ftp://ftp.lilypond.org/pub/yodl)
+
+it()The geometry package for LaTeX is needed to use ly2dvi.
+Available at
+lurl(ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry)
+or at mirror site lurl(ftp://ftp.dante.de)
)
+
sect(RUNNING)
GNU LilyPond does use a lot of resources. For operation you need the
-following:
+following software
itemize(
it()TeX
it()A PostScript printer and/or viewer (such as Ghostscript) is strongly
recommended. Xdvi will show all embedded PostScript too if you have
Ghostscript installed.
-it() GUILE 1.3 (no, GUILE 1.2 won't work), check out lurl(http://www.gnu.org/programs/guile.html)
+it() GUILE 1.3, check out lurl(http://www.gnu.org/programs/guile.html)
)
represents TeX() and MetaFont's default search paths. Scripts with
the proper paths for the bourne and C-shell respectively are generated in
file(buildscripts/out/lilypond-profile) and
-file(buildscripts/out/lilypond-login) during compilation.
-
+file(buildscripts/out/lilypond-login) during compilation.
-sect(RECOMMENDED)
+LilyPond is a hideously slow program. A fast CPU and plenty of RAM is
+recommended for comfortable use.
-Although not strictly necessary, these are recommended to have.
-
-itemize(
-it()GNU make.
-Check out lurl(ftp://ftp.gnu.org)
-or any mirror of this site.
-it()Flex (version 2.5.4 or newer).
-Check out lurl(ftp://ftp.gnu.org)
-or any mirror of this site.
-it()Bison (version 1.25 or newer).
-Check out lurl(ftp://ftp.gnu.org)
-or any mirror of this site.
-it() GUILE 1.3 (no, GUILE 1.2 won't work),
-check out lurl(http://www.gnu.org/programs/guile.html).
-
-
-it()Python (version 1.5 or newer). Check out
-lurl(ftp://ftp.python.org) or lurl(ftp://ftp.cwi.nl/pub/python).
-
-it()Yodl. All documentation will be in Yodl. (1.30.17)
-lurl(ftp://ftp.lilypond.org/pub/yodl)
- lurl(http://www.cs.uu.nl/~hanwen/yodl)
-it()Texinfo. (version 3.12 or newer)
-
-it()GNU find
-Check out lurl(ftp://ftp.gnu.org)
-or any mirror of this site.
-
-it()The geometry package for LaTeX is needed to use ly2dvi.
- Available at
-lurl(ftp://ftp.ctan.org/tex-archive/macros/latex/contrib/supported/geometry)
-or at mirror site lurl(ftp://ftp.dante.de)
-
-it() A fast computer: a full page of music typically takes 1 minute on my
- 486/133, using the bf(--enable-checking) compile.
-)
sect(WEBSITE)
)
Building the website requires pnmtopng. The version of file(pnmtopng)
-that is distributed with RedHat 5.1 contains a bug (pnmtopng is
-dynamically linked to the wrong version of libpng). Recompile it from
-source, and make sure that the pnmtopng binary is linked statically to
-the libpng that is included in libgr.
+that is distributed with RedHat 5.1 and 5.2 contains a bug: pnmtopng
+is dynamically linked to the wrong version of libpng. Recompile it
+from source, and make sure that the pnmtopng binary is linked
+statically to the libpng that is included in libgr. RedHat 6.0 does
+not have this problem.
verb( tar xzf libgr-2.0.13.tar.gz
make
nsect(DESCRIPTION)
This page documents how to distribute your changes to GNU lilypond
-(or in fact any other StepMake package).
nsect(ABSTRACT)
-Distributing a change normally goes like this:
+We would like to have unified context diffs with full pathnames. A
+script automating supplied with Lily.
+
+ Distributing a change normally
+goes like this:
itemize(
it()make your fix/add your code
nsect(SYNCHRONISE)
-If you're not very quick with sending your patch, there's a good chance
-that an new release of LilyPond comes available. In such a case (and
-sometimes for other unkown reasons :-), the maintainer will probably ask
-you to make a new patch against the latest release.
-Your best bet is to download the latest release, and apply your patch
-against this new source tree:
+If you're not very quick with sending your patch, there's a good
+chance that an new release of LilyPond comes available. In such a
+case, the maintainer will probably ask you to make a new patch against
+the latest release. Your best bet is to download the latest release,
+and apply your patch against this new source tree:
verb(
cd lilypond-0.1.74
verb(
Please send your e-mail to one of the MAILING LISTS
)
-and not to us personally. See file(Documentation/links.yo) for more info.
+and em(not) to us personally. See file(Documentation/links.yo) for more info.
sect(WINDOWS 32)
These pages were entirely created from the LilyPond package-sources.
Sorry for poor look they have: we want to be hacking at LilyPond, and
-not at the webpages.
+not at the webpages. If you want to volunteer for making shazzy
+webpages, then please mail us!
Note: These pages are created from the latest bf(development snapshots)
of LilyPond, specifically, this page was made from LilyPond
itemize(
it()url(Tutorial)(DOEXPAND(docdir)/tex/DOEXPAND(outdir)/tutorial.html)
it()url(FAQ)(DOEXPAND(docdir)/DOEXPAND(outdir)/faq.html)
-it()url(Reference Manual)(DOEXPAND(docdir)/tex/DOEXPAND(outdir)/refman.html)
it()url(Mailing Lists)(DOEXPAND(docdir)/DOEXPAND(outdir)/mail.html)
it()url(All of the LilyPond documentation)(DOEXPAND(docdir)/DOEXPAND(outdir)/index.html)
it()url(The DOC++ documentation of the C++ sources.)(DOEXPAND(depth)/docxx/index.html)
\context Staff \notes\relative c'{
c4 d e f
\repeat semi 3 { g a b c }
-% \alternative { { c b a g } { f e d c } } c c c c
+ \alternative { { c b a g } { f e d c } } c c c c
\alternative { { c b a g } { f e d c } { c d e f } }
g g g g
\repeat semi 2 { c c c c }
We need virtual constructors,
let's try decentralised factory for specific audio implemenations.
- TODO:
-
- virtual Niff_item* niff_item_p() = 0;
-
- virtual CSound_item* score_item_p() = 0;
*/
struct Audio_item : public Audio_element {
Audio_item (Request* req_l);
const Real CM_TO_PT=INCH_TO_PT/2.54;
const Real MM_TO_PT=CM_TO_PT/10;
const Real PT_TO_PT =1.0;
+const Real INCH_TO_BP = 72;
+const Real BIGPOINT_TO_POINT = INCH_TO_PT/ INCH_TO_BP;
+
#define PT *PT_TO_PT
#define MM *MM_TO_PT
#define CM *CM_TO_PT
#define INCH *INCH_TO_PT
+#define BIGPOINT *BIGPOINT_TO_POINT
String print_dimen (Real);
};
/**
- Turn a note on (blond).
+ Turn a note on.
*/
struct Midi_note : public Midi_item {
Midi_note (Audio_item* audio_item_l);
};
/**
- Turn a note off (dark).
+ Turn a note off
*/
struct Midi_note_off : public Midi_item {
Midi_note_off (Midi_note*);
is called unfolded. Useful for MIDI.
+
+ If the number of repeats is smaller than the number of alternatives, then
+
+ FIXME
+
+ If the number of repeats is bigger than the number of alternatives, then
+
+ FIXME
+
*/
class New_repeated_music : public Music
{
;; Spacing constants for prefatory matter.
;;
-;; rules for this are complicated. See [Wanske] page 126 -- 134
+;; rules for this spacing are much more complicated than this. See [Wanske] page 126 -- 134
;;
;;
(define space-alist