+++ /dev/null
-\input texinfo @c -*-texinfo-*-
-@setfilename MANIFESTO.info
-@settitle MANIFESTO - Rationale behind the GNU LilyPond project
-
-@node Top, , Goals for mudela, (dir)
-@top
-@menu
-* MANIFESTO - Rationale behind the GNU LilyPond project::MANIFESTO - Rationale behind the GNU LilyPond project
-@end menu
-
-
-
-@node MANIFESTO - Rationale behind the GNU LilyPond project, Goals for LilyPond, , Top
-@menu
-* Goals for LilyPond:: Goals for LilyPond
-* Development constraints:: Development constraints
-* Goals for mudela:: Goals for mudela
-@end menu
-@chapter MANIFESTO -- Rationale behind the GNU LilyPond project
-
-
-@node Goals for LilyPond, Development constraints, MANIFESTO - Rationale behind the GNU LilyPond project, MANIFESTO - Rationale behind the GNU LilyPond project
-@section Goals for LilyPond
-
-GNU LilyPond was written with some considerations in mind:
-
-@itemize @bullet
-@item Describing a well-defined language for defining music. We call
- this language (rather arrogantly) The Musical Definition Language
- (mudela for short). GNU LilyPond reads a mudela sourcefile and outputs a
- TeX file.
-@item Providing an easy-to-use interface for typesetting music in
- its broadest sense. This interface should be intuitive from a musical
- point of view. By broadest sense we mean: it is designed for music
- printed left to right in staffs, using notes to designate rythm and
- pitch.
-@item Generating high-quality output. Ideally it should be of a professional
- quality. We'd like to render Herbert Chlapiks words, "Fine music
- setting is not possible without a knowledgeable printer," untrue.
-@item Making a system which is fully tweakable. It should be possible to
- typeset a book on how not to typeset music.
-@end itemize
-
-@node Development constraints, Goals for mudela, Goals for LilyPond, MANIFESTO - Rationale behind the GNU LilyPond project
-@section Development constraints
-
-Further considerations while doing the programming
-
-@itemize @bullet
-@item GNU LilyPond uses TeX for its output. This is not a key issue: in a
- future version, GNU LilyPond might bypass TeX, but at the moment TeX
- is convenient for producing output.
-@item GNU LilyPond does not display notes directly, nor will it be rehacked
- to be used interactively. GNU LilyPond writes output to a file. It
- will not be extended to play music, or to recognize music.
-@item GNU LilyPond is intended to run on Unix platforms, but it should
- be portable to any platform which can run TeX and the GNU tools
-@item GNU LilyPond is free. Commercial windows packages for setting music are
- abundant. Free musicprinting software is scarce. For more thoughts on
- this, please consult the @file{gnu-music} documentation.
-@item GNU LilyPond is written in GNU C++. It will not be downgraded/ported to fit
- broken systems.
-@end itemize
-
-@node Goals for mudela, Top, Development constraints, MANIFESTO - Rationale behind the GNU LilyPond project
-@section Goals for mudela
-
-The design of Mudela has been (perfect past tense, hopefully) an
-ongoing process, the most important criteria being:
-
-@itemize @bullet
-@item define the (musical) message of the composer as unambiguously as possible.
- This means that, given a piece Mudela, it should be possible for a
- program to play a reasonable interpretation of the piece.
-
- It also means that, given a piece of Mudela, it should be possible for a
- program to print a score of the piece.
-@item be intuitive, and easily readable (compared to, say, Musi*TeX input,
- or MIDI :-),
-@item be easily writable in ASCII with a simple texteditor
-@end itemize
-
-Other considerations were (and will be):
-
-@itemize @bullet
-@item be able to edit the layout without danger of changing the original
- music (Urtext),
-@item allow for adding different interpretations, again,
- without danger of changing the original,
-@item easy to create a conductor's score,
- as well as the scores for all individual instruments,
-@item provide simple musical manipulations, such as @emph{i} extracting a
- slice of music from a previously defined piece, @emph{ii} extracting
- only the rhythm from a piece of music, @emph{iii} transposing, etc.,
-@item easy to comprehend to both programmers and others.
-@end itemize
-
-One of the things that (might) be here would be: feasible to use in a
-graphic editor. We don't have experience with these beasts, so we
-don't know how to do this. Comments appreciated.
-
-Musical pieces could be
-
-@itemize @bullet
-@item Orchestral scores, (eg Mahler)
-@item piano pieces (eg. Schubert, Rachmaninov),
-@item pop songs (lyrics and chords),
-@item Gregorian chants,
-@item Bach multivoice organ pieces,
-@item Short excerpts to be used in musicological publications.
-@end itemize
-
-
-@bye
+++ /dev/null
-// vim:sw=2 makeprg=g++\ -g\ bow.cc\ -o\ bow
-#include <iostream.h>
-#define PT
-// #define STAFFHEIGHT 16.0
-#define STAFFHEIGHT 20.0
-
-#define UP 1
-#define DOWN (-1)
-
-// mmm
-#define STANDALONE
-
-#include <math.h>
-
-typedef void *Paper_def;
-
-bool experimental_features_global_b = true;
-//bool experimental_features_global_b = false;
-
-#include "bezier.hh"
-
-#if 0
-#include "offset.cc"
-#include "interval.cc"
-#endif
-
-#include "misc.cc"
-#include "bezier.cc"
-
-struct Point
-{
- Real x, y;
-};
-
-void
-out (Bezier_bow& b)
-{
- cout << "save dx,dy,x,y;\n";
- for (int i = 0; i < 4; i++)
- cout << "z" << i + 1 << " = (" << b.control_[i].x ()
- << ", " << b.control_[i].y () << ");\n";
- for (int i = 1; i < 3; i++)
- cout << "z" << i + 4 << " = (" << b.return_[i].x ()
- << ", " << b.return_[i].y () << ");\n";
-#if 0
- cout << "pickup pencircle scaled 0.5pt#;\n";
- cout << "draw z2--z3; draw (50,0)-- 0.5[z2,z3];\n";
-#endif
- cout << "pickup pencircle scaled 4pt#;\n";
- for (int i = 0; i < 4; i++)
- cout << "drawdot z" << i + 1 << ";\n";
- cout << "path boogje;\n";
-#if 0
- cout << "pickup pencircle scaled 0.4pt#;\n";
- cout << "boogje=z1..controls z2 and z3..z4..controls z5 and z6..cycle;\n";
- cout << "filldraw boogje;\n";
-#else
- cout << "pickup pencircle scaled 1.6pt#;\n";
- cout << "boogje=z1..controls z2 and z3..z4;\n";
- cout << "draw boogje;\n";
- cout << "pickup pencircle scaled 0.4pt#;\n";
- cout << "boogje:=z4..controls z5 and z6..z1;\n";
- cout << "draw boogje;\n";
-#endif
- cout << "showit; shipit;clearit;" << endl;
-}
-
-void
-bow (Point* points, int n, int d)
-{
- Array<Offset> notes;
- for (int i = 0; i < n; i++)
- notes.push (Offset (points[i].x, points[i].y));
-#if 1
- cout << "pickup pencircle scaled 8pt#;\n";
-#else
- cout << "pickup pencircle scaled 2pt#;\n";
-#endif
- for (int i = 0; i < n; i++)
- cout << "drawdot (" << notes[i].x () << ", " << notes[i].y () << ");\n";
- Bezier_bow b (0);
- b.set (notes, d);
- b.calc ();
- out (b);
- return;
-}
-
-int
-main ()
-{
- //cout.unsetf(ios::scientific);
- cout.setf(ios::fixed);
-#if 1
- bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,1 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,0, 40,30, 60,30, 80,0, 100,1 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,10, 100,1 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,40, 100,1 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,0, 40,0, 60,40, 80,0, 100,1 }, 6, 1);
- bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, 1);
- bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
- bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,100 }, 6, -1);
- bow ((Point[9]){ 0,0, 20,0, 40,-80, 60,0, 80,0, 100,0, 120,0, 140,0, 160,-1 }, 9, -1);
- bow ((Point[9]){ 0,0, 40,0, 80,180, 120,0, 160,0, 200,0, 240,0, 280,0, 320,1 }, 9, 1);
- bow ((Point[9]){
- {0, 0},
- {19.10645980317711, 1},
- {29.402919606354207, 28},
- {55.389379409531308, 1},
- {73.530839212708514, 1},
- {91.672299015885727, 1},
- {111.35901367452229, 1},
- {131.04572833315891, 1},
- {145.76744299179552, 0}
- },
- 9, 1);
- bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,40 }, 6, 1);
- bow ((Point[2]){ 0,0, 20,0 }, 2, 1);
- bow ((Point[2]){ 0,0, 20,-10 }, 2, 1);
- bow ((Point[6]){ 0,0, 20,0, 40,0, 60,0, 80,0, 100,100 }, 6, 1);
-
- bow ((Point[6]){ 0,0, 20,-10, 40,20, 60,-20, 80,20, 100,0 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,-10, 40,20, 60,-20, 80,20, 100,0 }, 6, -1);
- bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
- bow ((Point[6]){ 0,0, 20,20, 40,0, 60,40, 80,20, 100,100 }, 6, -1);
-
- bow ((Point[6]){ 0,-10, 20,-20, 40,0, 60,-40, 80,-20, 100,-50 }, 6, 1);
-
- bow ((Point[6]){ 0,10, 20,20, 40,0, 60,40, 80,20, 100,50 }, 6, -1);
-#endif
-
-#if 1
- //clipping
-
- bow ((Point[6]){ 0,0, 20,60, 40,0, 60,0, 80,0, 100,1 }, 6, 1);
-
- bow ((Point[6]){ 0,1, 20,0, 40,0, 60,0, 80,60, 100,0 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,20, 100,100 }, 6, -1);
- bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-20, 100,-100 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-140, 100,-100 }, 6, -1);
- bow ((Point[7]){ 0,0, 20,40, 100,0, 150,0, 200,0, 280,40, 300,0 }, 7, 1);
- bow ((Point[7]){ 0,0, 20,-40, 100,0, 150,0, 200,0, 280,-40, 300,0 }, 7, -1);
- bow ((Point[7]){ 0,20, 20,40, 100,0, 150,0, 200,0, 280,40, 300,20 }, 7, 1);
- bow ((Point[3]){ 0,0, 10,10, 20,-20 }, 3, 1);
-
- bow ((Point[4]){ 0,0, 33,100, 75,0, 100,100 }, 4, -1);
- bow ((Point[4]){ 0,0, 33,-100, 75,0, 100,-100 }, 4, 1);
-#endif
-
-#if 1
- // infeasible
-
- bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
- bow ((Point[6]){ 0,0, 20,-40, 40,0, 60,20, 80,20, 100,40 }, 6, -1);
- bow ((Point[6]){ 0,0, 20,-20, 40,-20, 60,-20, 80,-80, 100,-40 }, 6, -1);
- bow ((Point[6]){ 0,0, 20,-20, 40,-40, 60,-60, 80,-140, 100,-100 }, 6, -1);
- bow ((Point[6]){ 0,0, 20,20, 40,40, 60,60, 80,140, 100,100 }, 6, 1);
-#endif
-
- cout << "\\end" << endl;
-
- return 0;
-}
-