+++ /dev/null
-article(Mutopia project - manifesto)(HWN and JCN)()
-
-This is some random ranting about the Mutopia project, aka "Music To
-the People," the ultimate goal which I want to accomplish using
-LilyPond and mudela.
-
-sect(Why)
-
-Music publishers make lots of money out of selling sheet music which
-is in the public domain (the composers died a long time ago). It is
-usually prohibited to xerox the sheet music. Publishers have two
-arguments to justify this policy: the high prices are there to
-guarantee diversity (keeping lots of it in stock is expensive), and to
-encourage new work being composed.
-
-This is bad. Storing a Mudela file takes almost no space at all, and
-if sheet music could be had for free, then it would be much easier
-obtain less famous music. These composers have died long ago, and not
-having their music available only discourages people from
-experimenting with it. You deserve to get public domain music for
-free (zero cents)
-
-sect(What )
-
-For literature, the project Gutenberg has an archive of public domain
-literary works. For music, this does not exist yet.
-
-We also need an archive of public domain sheet music; this is what we
-call The Mutopia Project.
-
-
-sect(Status)
-
-This project is still in its infancy: we have very little amount of
-music available. The music is partly downloadable from the website.
-All of it is included in the source archive of LilyPond.
-
-itemize(
-it()J.S. Bach, Das Wohltemperierte Clavier I: C major Prelude & Fugue, C
- minor fugue. Solo cello suites: suite II. Six small preludes: some
- preludes.
-it()W. A. Mozart, Horn concerto 3, solo part + cadenza.
-it()F. Schubert, St\"andchen (Serenade) "Leise flehen meine Lieder"
-it()Tarquinio Merula, La Gallina a 2 violini
-it()Paul Lacome d'Estalenx, La Feria, Los Toros (oboe 1)
-)
+++ /dev/null
-/*
- staff-side.hh -- declare Staff_side
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-
-#ifndef STAFF_SIDE_HH
-#define STAFF_SIDE_HH
-
-#include "score-element.hh"
-#include "interval.hh"
-#include "direction.hh"
-#include "staff-symbol-referencer.hh"
-
-/**
-
- A symbol which sits either below or above "something" (usually, a
- staff).
-
-*/
-class Staff_side : public Staff_symbol_referencer
-{
-public:
-
- /**
- Vertical dir of symbol relative to staff. -1 = below staff?
- */
- Direction dir_;
- Axis axis_;
- Interval sym_int_;
-
- Real coordinate_offset_f_;
-
- /**
- Add extra vertical space to the support symbols.
- */
- Real padding_f_;
-
- Staff_side ();
- void add_support (Score_element*);
-
-
-protected:
- virtual Interval symbol_height () const;
- Interval symbol_extent () const;
- virtual Real get_position_f () const;
- virtual void do_substitute_element_pointer (Score_element *, Score_element*);
- virtual void do_pre_processing ();
- virtual void do_post_processing ();
- virtual void do_add_processing ();
- Interval support_extent () const;
-private:
- void do_side_processing ();
- Link_array<Score_element> support_l_arr_;
-};
-
-#endif // STAFF_SIDE_HH
+++ /dev/null
-/*
- staff-side.cc -- implement Staff_side
-
- source file of the GNU LilyPond music typesetter
-
- (c) 1997--1999 Han-Wen Nienhuys <hanwen@cs.uu.nl>
-*/
-
-#include "interval.hh"
-#include "paper-def.hh"
-#include "staff-side.hh"
-#include "staff-symbol.hh"
-#include "debug.hh"
-#include "dimensions.hh"
-
-
-Staff_side::Staff_side()
-{
- coordinate_offset_f_=0;
- sym_int_ = Interval (0,0);
- padding_f_ = 0.0;
- dir_ = CENTER;
- axis_ = Y_AXIS;
-}
-
-
-Interval
-Staff_side::support_extent() const
-{
- Interval y_int;
- for (int i=0; i < support_l_arr_.size(); i++)
- {
- Dimension_cache *common =
- common_group (support_l_arr_[i], axis_);
-
- Real y = support_l_arr_[i]->relative_coordinate (common, axis_)
- -relative_coordinate (common,axis_);
-
- y_int.unite (y + support_l_arr_[i]->extent(axis_));
- }
-
- if (y_int.empty_b())
- {
- y_int = Interval (0,0);
- }
- return Interval(y_int[LEFT] - padding_f_, y_int[RIGHT] + padding_f_);
-}
-
-void
-Staff_side::add_support (Score_element*i)
-{
- support_l_arr_.push (i);
- add_dependency (i);
-}
-
-Real
-Staff_side::get_position_f () const
-{
- if (!dir_)
- {
- warning (_ ("Staff_side::get_position_f(): "
- "somebody forgot to set my direction, returning -20"));
- return -20;
- }
-
-
- Real y = 0;
- Real inter_f = staff_line_leading_f () /2;
-
- Interval v = support_extent();
-
- // ugh, dim[y] = PT over here
- y = v[dir_] + 1 * dir_ * inter_f;
-
- int coordinate_offset_f_i = (int)rint (y / inter_f);
- if (axis_ == Y_AXIS && abs (coordinate_offset_f_i) < lines_i ())
- {
- if (!(abs (coordinate_offset_f_i) % 2))
- y += (Real)dir_ * inter_f;
- }
-
- return y;
-}
-
-Interval
-Staff_side::symbol_height() const
-{
- return Interval (0,0);
-}
-
-void
-Staff_side::do_pre_processing ()
-{
- if (axis_== X_AXIS)
- do_side_processing ();
-}
-
-void
-Staff_side::do_side_processing ()
-{
- sym_int_ = symbol_extent();
- coordinate_offset_f_ = get_position_f();
- if (dir_)
- coordinate_offset_f_ += - sym_int_[-dir_];
-
-}
-
-/*
- ugh should use do_width (), do_height (), get_extent ()
- */
-Interval
-Staff_side::symbol_extent () const
-{
- if (axis_ == Y_AXIS)
- return symbol_height ();
- else
- {
- assert (false);
- }
-}
-
-
-void
-Staff_side::do_post_processing()
-{
- if (axis_ == Y_AXIS)
- do_side_processing ();
-}
-
-void
-Staff_side::do_substitute_element_pointer (Score_element*o, Score_element*n)
-{
- Staff_symbol_referencer::do_substitute_element_pointer (o,n);
- support_l_arr_.unordered_substitute (o,n);
-}
-
-void
-Staff_side::do_add_processing ()
-{
- if (axis_ == Y_AXIS && staff_symbol_l ())
- add_support (staff_symbol_l ());
-}
-