]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/faq.pod
release: 0.1.32
[lilypond.git] / Documentation / faq.pod
index 6fc58b2f26c63394a5c1e241d851a64ac06fc226..45a3cceb2e9ea5084961db136a417ebba76d0c93 100644 (file)
@@ -1,11 +1,79 @@
 =head1 NAME
 
-FAQ - LilyPond FAQs
+FAQ - GNU LilyPond FAQs
 
 =head1 DESCRIPTION
 
 Some questions that have been answered before.
 
+=head2 Installing
+
+Q: I get all kinds of errors while  compiling F<parser.cc>
+
+A: LilyPond uses features of bison version 1.25. Please confirm that
+you are using a version 1.25 or better, that is B<GNU> bison
+B<1.25>. Don't forget to do "make clean" after installing it. Don't
+forget to remove the stale F<bison.simple> as well.
+
+If the problem persists, then please mail me.
+
+Q: Some of your neat scripts fail, what directories do you use:
+
+A: [This only applies if you don't do C<make install>, and develop out
+of the source directory]
+       
+       ~/something/
+
+which contains:
+
+         lilypond/     # the directory as unpacked from the tarball
+         releases/     # directory for .tar.gz releases
+         patches/      # directory for patches between different releases
+         test/
+       
+~/something/lilypond/bin is in the PATH, and contains symlinks to the
+compiled executables.
+
+If you don't use patches, you'd probably want to symlink
+
+       lilypond -> lilypond-x.y.z
+
+=head2 Language: mudela
+
+Q: Why can't you type C<#c> in stead of C<cis> ?
+
+A: We think that C<#c> looks as if you are entering the symbols to
+print (which you are not; remember, you're entering the musical
+content in Mudela)
+
+We're not sure on leaving out this feature. If you think this is a
+good idea, please let us know.
+
+Be warned we will I<not> allow you to leave out the C<#> if the note
+already has an accidental. We won't allow
+
+       c# c    % no way! 
+
+in stead of:
+
+       cis cis
+       #c #c
+
+Why, you might ask? Because independently of how it was written, you
+would say that you are playing and reading "two C-sharp" notes.
+
+
+Q: What is C<cis> anyway
+
+A: C<cis> is the dutch naming for C-sharp. The notes are named
+a, b,.., g. The suffix -is means sharp, and -es flat. This system is
+common in a number of languages (such as swedish, dutch, german.)
+Certain other languages (such as English, French and Italian) just add
+the word for "sharp" to the notename.
+
+We chose the Dutch system, because we're dutch. You are free to chose
+whatever names you like; they are user definable.
+
 Q: I can type
 
        <a c> <e g>
@@ -13,15 +81,15 @@ Q: I can type
 to make a few chords, but why do I have to type
 
 
-       < { a() e } { c () g } >
+       < { a~ e } { c ~ g } >
 
 instead of
 
-       <a( c(> <)e )g>
+       <a~ c~> <e g>
 
-to generate slurs between the chords?
+to generate ties between the chords?
 
-A L1: When you type 
+A: When you type 
 
        <a c> <e g>
 
@@ -29,98 +97,181 @@ this is shorthand for
 
        < { a } { c } > < { e } { g } >
 
-Slurs have to be confined to `voices', and the a and the e are in
+Ties have to be confined to `voices', and the a and the e are in
 different {} blocks, so they are in different voices. You should view
 the desired construct as a "generalised chord" (two voices stacked
 vertically). It might help you visualise this by using the following
 formatting:
 
-       < { a () e }
-         { c () g }
+       < { a ~ e }
+         { c ~ g }
        >
 
+Q: and where do the beams come into this picture?
+
+A: Beams are voicegroup-wide, and may be entered in any part of the
+voicegroup:
+
+       < { [a ~ e] } { c ~ g } >
+       < { [a ~ e } { c ~ g] } >
+       < { [a ~ e] } { [c ~ g] } >
 
-Q L2: Why are [] around the notes, and () inbetween?
+These all give the same result.
 
-A L2: [] designate beams, a note can only be in one beam at the same
+Q: Why are [] around the notes, and () inbetween?
+
+A: [] designate beams, a note can only be in one beam at the same
 time. () is a slur, which connects notes.  You need to be able to 
 specify
 
        a()a()a
 
-Q L3: Why shouldn't I put all commands (\clef, \meter) inside the music?
+Q: I want to insert some TeX commands
+
+A: You shouldn't: it's against LilyPond philosophy to have typesetting
+commands in the mudela source. Moreover, this would be difficult. The
+manner in which Request (the basic building blocks of mudela) are
+translated into printable items is complex: it is not always possible
+to associate one Request with one Item or Spanner.
+
+As a further notice, we want to move away from TeX (and perhaps
+output PostScript or render to an X window too), so  using TeX will
+make sources non-portable at some time.
+
+=head2 Miscellaneous
+
+Q: Do you support pop songs (chords, single staff, lyrics)?
+
+A: Yes, see the F<twinkle-pop> example
+
+Q: Do you support guitar chord diagrams?
+
+A: No, not yet. We ourselves don't play guitar, and don't know the
+fine points of this notation.  We would welcome anyone who could give
+this a try.
+
+Q: Do you support TAB notation
+
+A: No. The same as for the previous question goes, but TAB is a lot
+more work than diagrams (TAB needs modification of Parser, Lexer,
+Staff, Notehead, Stem code and all the code that creates these graphic
+elements.)
+
+Q: How do I change the TeX layout?
+
+A: See F<lilyponddefs.tex>, it has some comments.
 
-A L3: You should do what you like, but at some time we will enable
-quoting of music ("Stichnoten"). Besides if you are going to type an
-orchestral score, then you'd probably want to enter most of the meter,
-repeat commands only once.
+Q: How do I learn the C++ code?
 
-=head2 MISCELLANEOUS
+A: The entry point is in C<main()>. Good luck. :-)
 
-Q M1: Why GPL?
+Seriously, read, reread and reread lilygut and CodingStyle, and
+just start anywhere. 
 
-A M1: Yes.
+Anywhere? Well, most of the comment doco are in the header files, so
+your best bet would be C<less lily/include/*.hh>. Some of the most
+important data-structures are to be found in:
 
-Q M2: Could you implement feature XXXX? It is really easy, just extend
+       - p-col.hh
+       - *request.hh
+       - engraver.hh
+       - performer.hh
+       - translator.hh
+       - score-elem.hh
+       - music.hh
+       - music-list.hh
+       - music-iterator.hh
+       - item.hh
+       - spanner.hh
+
+
+Q: Why GPL?
+
+A: Yes.
+
+Q: Could you implement feature XXXX? It is really easy, just extend
 the syntax to allow YYYY!
 
-A M2: If it is reasonable, I'll add XXXX to the TODO list. In general
+A: If it is reasonable, I'll add XXXX to the TODO list. In general
 finding a cute syntax (such as YYYY) isn't very hard. The complicated
-issue how to adapt the internals to do XXXX. The parser is really  a
+issue how to adapt the internals to do XXXX. The parser is really a
 simple front end to the complicated internals. 
 
-Q M3: Why do I need g++ >= 2.7?
 
-A M3: By using g++ LilyPond is portable to all platforms which support
+Q: I want to implement XXXX!  Should I do this?
+
+A: There might be better ways of doing XXXX, so it's a good thing to
+ask about this before you start hacking.  If you want to keep in touch
+with current developments, you should subscribe to the mailing list
+(see the "links" section of the documentation).
+
+
+Q: I want to implement XXXX!  How should I do this?
+
+A: Your best bet of getting me to include code, is to present it as a
+"fait accompli", ie., to send me a patch.
+
+
+Q: Why do I need g++ >= 2.7?
+
+A: By using g++, GNU LilyPond is portable to all platforms which support
 g++ (there are quite a few). Not having to support other compilers
-saves us a I<lot> of trouble. LilyPond and FlowerLib use:
+saves us a I<lot> of trouble. 
+
+=head2 Running
 
-=over 4
+Q: I don't get midi-output, even if I use B<-M>
 
-=item *
-builtin bool
+A: Your \score should include a \midi block, eg.
 
-=item *
-64 bit integral type long long
+       \score {
+               \melodic { c4 c g g }
+               \paper {}       
+               \midi {
+                       \output "myfile.mid";
+                       \tempo 4=70;
+               }
 
-=item *
-typeof
+The B<-M> option was added to LilyPond because processing the \paper
+block is so slow.
 
-=item *
-operator <?, operator >?
+Q: A lot of musical stuff doesn't make it to the MIDI file (dynamics,
+articulation, etc).
 
-=item *
-the new for-scope
+A: The MIDI output was originally put in as a proof that MIDI could be
+done, and as a method of proof"reading" the input.  The MIDI support
+is by no means finished. 
 
-=item   *
-class Rational (libg++)
+Q: I get 
 
-=item *
-named return values
+       can't load library 'libflower.so'
 
-=back
+A: You are using the dynamically compiled Flower library. Please set
+LD_LIBRARY_PATH to a directory containing F<libflower.so>
 
 =head2 DOZE
 
-Q D1: I want a DOS/NT/W95 port.
+Q: I want a DOS/NT/W95 port.
 
-A D1.0: Reconsider.  Try Linux.  It's fun!
+A.0: Reconsider.  Try Linux.  It's fun!
 
-A D1.1: Currently (patchlevel 27), LilyPond (and flowerLib) compiles, links
-and runs on windhoos-nt, using the cygnus gnu port (release b17.1). 
+A.1: Currently (0.0.27), GNU LilyPond (and flowerLib) compiles, 
+links and runs on Windows-nt, using Cygnus' gnu port (release b17.1). 
 I (JCN) only had to make a minor workaround for missing library calls.  
-Have a look at http://www.cygnus.com/gnu-win32.  To make LilyPond type
-C<make $OSTYPE>. (I am not promising to maintain this platform, it is just 
-that when having to use doze, i-m sometimes too lazy to reboot.)
+Have a look at http://www.cygnus.com/gnu-win32.  To make GNU LilyPond 
+type C<make>. (I am not promising to maintain this platform, it is just
+that when forced into doze, i'm sometimes too lazy to reboot.)
 
-A D1.2: I haven't had time to find a GCC crosscompiler (I<with> g++ and
-libg++, mind you) to DOS/win (in rpm, please :).
+A.2: I haven't had time to find a Linux GCC crosscompiler (I<with> g++
+and libg++, mind you) to DOS/Windows (in rpm, please :-)
 
+A.3: If you are knowledgeable enough to make w32 compiles from time to
+time, please do so!  We want to keep away from w32 as far as possible.
 
-Q D2: I-m dozed enough to run the (sometimes bit stale) .exe-s you distribute. 
+Q: I just love to blindly run the (sometimes bit stale) .exe's you distribute. 
 Why do i need cygwin.dll?
 
-A D2: It-s all in this cut-n-paste:
+A: It's all in this cut-n-paste:
 
 Minimalist GNU-Win32 Readme                   
 version 0.1.3