Line_spacer 0
Melodic_req 0
Midi_def 0
-Midistrings 1
+Midistrings 0
Mixed_qp 0
Music 0
Music_iterator 0
-29/Jan/98 LilyPond 0.1.45 1
+29/Jan/98 LilyPond 0.1.46 1
-29/Jan/98 LilyPond 0.1.45 2
+29/Jan/98 LilyPond 0.1.46 2
=head2 Engraving: further reading
+Tom Gerou and Linda Lusk. ``Essential Dictionary of Music Notation''
+Alfred Publishing, Van Nuys CA, 1996. ISBN 0-88284-768-6.
+
+[A concise, alphabetically ordered list of typesetting and music
+(notation) issues with a rather simplistic attitude but in most
+cases "good-enough" answers JCN]
+
Herbert Chlapik. ``Die Praxis des Notengraphikers''. Doblinger, 1987.
ISBN 3-9000 035-96-2.
Norton, 1987.
Erdhard Karkoshka. ``Notation in New Music. Trans. Ruth
-Koenig''. Praeger Publishers, New York, 1972. Out of print.
+Koenig''. Praeger Publishers, New York, 1972. (Out of print)
C. Roemer, The Art of Music Copying. Roerick music co., Sherman Oaks
(CA), 1973.
Glen Rosecrans. Music Notation Primer. New York: Passantino, 1979.
Kurt Stone. Music Notation in the Twentieth Century. New York: Norton,
-1980.
+1980. (Out of print)
+
=head2 Other stuff
References and comments contributed by Han-Wen Nienhuys (HWN), Miguel
Filgueiras, Mark Basinski (MB), Dorothea Blostein, Stephen Page (SP),
-Jan Nieuwenhuizen, Peter Kerr.
+Jan Nieuwenhuizen (JCN), Peter Kerr.
This should really be redone in BibTeX
=item OpusTeX, http://www.inf.ethz.ch/personal/achermann/
-Andreas Egler's branch is called MusiXTeX.
+Andreas Egler's branch is now called OpusTeX.
=item ABC2MTeX, http://www.gre.ac.uk/~c.walshaw/abc
=item MUTEX, http://www.gmd.de/Misc/Music/
A TeX macro package for typesetting single-staff music by Angelika
-Schofer & Andrea Steinbach. With some fonts
+Schofer & Andrea Steinbach. With some fonts.
=back
=item Mup, http://www.arkkra.com/
A program which creates PS from a script input. Although it comes with
-C source code, it is Shareware.
+C source code, it is shareware.
=item MusicEase, http://mesa.colorado.edu/~grader/musicez.html
used ~DM 1.000.000 while developing this, it didn't buy them a cute
name.)
-=item Logic,
+=item Logic, http://www.emagic.com/
=item Finale
=item Score, http://www.ymusic.com/Score
-Werner Lemberg <sx0005@sx2.hrz.uni-dortmund.de>
-writes to me: I consider SCORE as the best program for
-typesetting classical music. [..] the price is quite high (about US$
-1000) [..] It has a graphical interface but to get all out of the
-program you have to learn a 400 page manual almost by heart because
-you'll change most features by inputting parameters (up to 20 for some
-items) on a command line. Expect three months to master SCORE :-)
-
-
+Werner Lemberg <sx0005@sx2.hrz.uni-dortmund.de> writes: I consider
+SCORE as the best program for typesetting classical music. [..] the
+price is quite high (about US$ 1000) [..] It has a graphical
+interface but to get all out of the program you have to learn a 400
+page manual almost by heart because you'll change most features by
+inputting parameters (up to 20 for some items) on a command
+line. Expect three months to master SCORE :-)
=item Personal Composer
=item Amadeus, Jerker.Elsgard@abc.se
-Jerker Elsgard writes: professional and expensive (DM 4000,--)
-engraving. Designed as a batch program (like LilyPond). It is aimed
-at publishers. Its history is more than fifteen years and Amadeus has
-been running under different Unix clones. It uses MIDI-keyboard input
+Jerker Elsgard <Jerker.Elsgard@abc.se> writes: professional and
+expensive (DM 4000,--) engraving. Designed as a batch program (like
+LilyPond). It is aimed at publishers. Its history is more than
+fifteen years and Amadeus has been running under different Unix
+clones. It uses MIDI-keyboard input
=back
=head2 Unknown
-=item MusE
+=item MusE, [no WWW address known]
A-R Music Engraving, by A-R Editions, Inc. Professional engraving on
Sun boxen.
A project at Ohio State university, which was discontinued in 1987.
The technical reports that have resulted from MusiCopy can still be
-obtained.
+obtained by writing to OSU department of Computer Science.
=item Berlioz, http://www.?.fr/
-28/Jan/98 LilyPond 0.1.45 1
+28/Jan/98 LilyPond 0.1.46 1
-28/Jan/98 LilyPond 0.1.45 2
+28/Jan/98 LilyPond 0.1.46 2
-28/Jan/98 LilyPond 0.1.45 3
+28/Jan/98 LilyPond 0.1.46 3
-28/Jan/98 LilyPond 0.1.45 4
+28/Jan/98 LilyPond 0.1.46 4
-28/Jan/98 LilyPond 0.1.45 5
+28/Jan/98 LilyPond 0.1.46 5
-28/Jan/98 LilyPond 0.1.45 6
+28/Jan/98 LilyPond 0.1.46 6
+pl 46
+ - span-bar at upstep.
+ - bf: \score { \score_identifier }
+ - tenor clef (MB)
+
+pl 45.jcn2
+ - preludes-4,5,6
+ - bf's denneboom (oeps, see loop)
+
+pl 44.jcn7
+ - text-item.cc: try to get fingers just above note...
+ - set minimum space between columns
+ - bff: mf/Makefile out/*log required: new .ly .tex's with make-dist :-(
+ - bf's midi ascii-debug output
+ - bf: property instrument
+*******
+feb 12
pl 45
- bf: translator switching
- SunOS and IRIX patches (AO)
- shared lib numbering (AF)
- various fixes for debian (AF)
- ly2dvi .6.jaf (JAF)
-
-pl 44.jcn5
+pl 44.jcn6
- bf: crescendo.cc: bigger and use bar_size
- slur: guess extra height for height limit for extending notes/stems
- ps: adjustable slur height limit, bf crescendo
grep for TODO and ugh/ugr
0.2:
+ * abbrevs
+
* use kpsepath to find all TeX dirs
- configure.in
- clean-fonts.sh
TOPLEVEL_MAJOR_VERSION = 0
TOPLEVEL_MINOR_VERSION = 1
-TOPLEVEL_PATCH_LEVEL = 45
+TOPLEVEL_PATCH_LEVEL = 46
TOPLEVEL_MY_PATCH_LEVEL =
# use the above to send patches, always empty for released version:
#
endFile(){
cat << EOF >> $LF
-\vfill\hfill{(\LilyIdString)}
+\vfill\hfill{\small\LilyIdString}
\end{document}
EOF
#
def untar(fn):
# os.system('pwd');
- sys.stderr.write('untarring ' + fn)
+ sys.stderr.write('untarring ' + fn + '\n')
# can't seem to fix errors:
# gzip: stdout: Broken pipe
# tar: Child returned status 1
# ugh, even this does not work, but one error message less :-)
os.system ('gzip --quiet -dc ' + fn + '| tar xf - ')
# so print soothing message:
- sys.stderr.write('make-patch:ugh: Please ignore error: gzip: stdout: Broken pipe\n');
+# sys.stderr.write('make-patch:ugh: Please ignore error: gzip: stdout: Broken pipe\n');
sys.stderr.flush()
os.chdir(prev_cwd)
def main():
+ os.environ['GZIP'] = '-q'
sys.stderr.write('This is make-patch version %s\n' % mp_version)
(cl_options, files) = getopt.getopt(sys.argv[1:],
'hf:o:t:', ['output=', 'help', 'from=', 'to='])
ifeq ($(LIB_SUFFIX),.so)
$(INSTALL) -d $(libdir)
$(INSTALL) $(LIBFLOWER).$(VERSION) $(libdir)
- ln -s $(LIB_PREFIX)flower$(LIB_SUFFIX).$(VERSION) $(libdir)/$(LIB_PREFIX)flower$(LIB_SUFFIX).$(MAJOR_VERSION)
- ln -s $(LIB_PREFIX)flower$(LIB_SUFFIX).$(VERSION) $(libdir)/$(LIB_PREFIX)flower$(LIB_SUFFIX)
+ ln -sf $(LIB_PREFIX)flower$(LIB_SUFFIX).$(VERSION) $(libdir)/$(LIB_PREFIX)flower$(LIB_SUFFIX).$(MAJOR_VERSION)
+ ln -sf $(LIB_PREFIX)flower$(LIB_SUFFIX).$(VERSION) $(libdir)/$(LIB_PREFIX)flower$(LIB_SUFFIX)
endif
localuninstall:
Full_storage f (dim(), 2*s+1);
for (int i=0; i < dim(); i++)
{
- int k=-s;
- for (; k < -band_size_i(); k++)
- f.elem (i,k + s) = 0.0;
- for (; k <= band_size_i()&& k<=s ; k++)
- f.elem (i, k + s) = band_.elem (i,k+ band_size_i());
- for (; k <= s; k++)
- f.elem (i, k + s) =0.0;
+ int k=-s;
+ for (; k < -band_size_i(); k++)
+ f.elem (i,k + s) = 0.0;
+ for (; k <= band_size_i()&& k<=s ; k++)
+ f.elem (i, k + s) = band_.elem (i,k+ band_size_i());
+ for (; k <= s; k++)
+ f.elem (i, k + s) =0.0;
}
band_ = f;
Full_storage f (d, 2*band_size_i()+1);
for (int i=0; i < d && i < dim(); i++)
{
- for (int k=0; k < 2*band_size_i(); k++)
- f.elem (i,k) = elem (i,k);
+ for (int k=0; k < 2*band_size_i(); k++)
+ f.elem (i,k) = elem (i,k);
}
band_ = f;
{
j++;
if (j < i - band_size_i())
- j = i- band_size_i();
+ j = i- band_size_i();
if (j > i + band_size_i() || j >= dim ())
{
- i++;
- j = 0 >? i - band_size_i();
+ i++;
+ j = 0 >? i - band_size_i();
}
}
{
i++;
if (i < j - band_size_i())
- i = j-band_size_i();
+ i = j-band_size_i();
if (i >= dim() || i > j + band_size_i ())
{
- j++;
- i = 0 >? j - band_size_i();
+ j++;
+ i = 0 >? j - band_size_i();
}
}
Diagonal_storage::elem (int i, int j) const
{
if (abs (i-j) > band_size_i())
- return 0;
+ return 0;
else
- return band_.elem (i, j - i +band_size_i());
+ return band_.elem (i, j - i +band_size_i());
}
Real &
assert (!nul_entry);
if (abs (i-j) > band_size_i())
- return nul_entry;
+ return nul_entry;
else
- return band_.elem (i, j - i + band_size_i());
+ return band_.elem (i, j - i + band_size_i());
}
/*
bool
Diagonal_storage::try_right_multiply (Matrix_storage*dest,
- const Matrix_storage*right) const
+ const Matrix_storage*right) const
{
if (right->name() != Diagonal_storage::static_name ())
- return false;
+ return false;
const Diagonal_storage* right_diag = (Diagonal_storage const*)right;
int band2 = right_diag->band_size_i();
int n = dim();
/*
should check if dest is a Diagonal_storage of sufficient size too.
- */
+ */
for (int i=0; i < n; i++)
{
- for (int j = 0; j < n; j++)
- {
- int startk = i - band_size_i() >? 0 >? j - band2;
- int stopk = i + band_size_i() <? n-1 <? j + band2;
- int relk = startk + band_size_i() -i;
- Real sum =0.0;
- for (int k = startk; k <= stopk; k++)
- sum += band_.elem (i, relk++) * right_diag->elem (k, j);
- dest->elem (i, j) = sum;
+ for (int j = 0; j < n; j++)
+ {
+ int startk = i - band_size_i() >? 0 >? j - band2;
+ int stopk = i + band_size_i() <? n-1 <? j + band2;
+ int relk = startk + band_size_i() -i;
+ Real sum =0.0;
+ for (int k = startk; k <= stopk; k++)
+ sum += band_.elem (i, relk++) * right_diag->elem (k, j);
+ dest->elem (i, j) = sum;
- }
+ }
}
return true;
}
resize_dim (stor_l->dim());
for (int i=0,j=0; mult_ok (i,j); mult_next (i,j))
- band_.elem (i, j + band_i -i) = stor_l->elem (i,j);
+ band_.elem (i, j + band_i -i) = stor_l->elem (i,j);
}
void
Score = \translator {
\type "Score_performer";
-% instrument = piano;
+ instrument = piano;
\accepts Staff;
\accepts Grandstaff;
\accepts Lyrics;
TestedFeatures = "This file tests silly line shapes";
}
-\include "paper13.ly"
+\include "paper20.ly"
\version "0.1.9";
oden = \lyric{
- _8 O8 den-8. ne-16 boom,4 _8 o8 den-8. ne-16 boom.4.
- Wat8 zijn uw tak-4 ken won-8. der-16 schoon4.
+ _8 O8 |
+ den-8. ne-16 boom,4 _8 o8 |
+ den-8. ne-16 boom.4. Wat8 zijn uw |
+ tak-4 ken won-8. der-16 schoon4
}
ikheb = \lyric{
- Ik8 heb u laatst4. in_'t8 bos8. zien16 staan4.
- toen8 zat- en er4. geen8 kaars-8. jes16 aan.4
+ _8 Ik8 heb u |
+ laatst4. in_'t8 bos8. zien16 staan4. toen8 zat- en |
+ er4. geen8 kaars-8. jes16 aan.4
}
ugloeit = \lyric{
- U8 gloeit in bar-4. re8 win-8. ter-16 tijd,4.
- als8 sneeuw op aar-4. de8 licht8. ge-16 spreid.4
+ _8 U8 gloeit in |
+ bar-4. re8 win-8. ter-16 tijd,4. als8 sneeuw op |
+ aar-4. de8 licht8. ge-16 spreid.4
}
oboom = \melodic{
g4 r8 f8 f8. e16 e4
}
-global = \melodic{
+global = \melodic{
\meter 3/4;
\partial 4;
\skip 4*1;
\skip 4*3;
\meter 4/4;
\skip 4*4;
- \meter 6/4;
- \skip 4*12;
\meter 5/4;
\skip 4*5;
\meter 3/4;
\meter 4/4;
\skip 4*4;
\meter 6/4;
+ \skip 4*6;
+ \skip 4*6;
+ \meter 5/4;
\skip 4*5;
-
+ \meter 3/4;
+ \skip 4*3;
+ \meter 4/4;
+ \skip 4*8;
\bar "|.";
}
\score{
<
-% {
\lyric \type Lyrics <
\multi 2 <
% huh?
% \global
{
+ \oden
\oden
\ikheb
\oden
-
-% _4
-% \oden
-% \ugloeit
-% \oden
}
- \global
>
>
-% }
\melodic \type Staff <
\multi 2 <
\global
{
+ \oboom
\oboom
\bos
\oboom
-
-% r4
-% \oboom
-% \bos
-% \oboom
}
>
>
>
\paper{
-% \paper_thirteen
+ \paper_twenty
indent = 20. \mm;
\shape = 70. \mm 20. \mm
65. \mm 30. \mm
27.5 \mm 105. \mm
20. \mm 120. \mm
10. \mm 140. \mm
-% 0. \mm 160. \mm
65. \mm 30. \mm
;
+ gourlay_maxmeasures = 30.;
+% uhuh, loop if you comment these in
+% arithmetic_basicspace = 3.8;
+% arithmetic_multiplier = 8.\pt;
+ }
+ \midi{
+ \tempo 4 = 90;
+ }
+}
+
%{
- \shape = % 72.5 \mm 15. \mm
- % 50. \mm 60. \mm
- 70. \mm 30. \mm
- 60. \mm 60. \mm
- 50. \mm 80. \mm
- 70. \mm 40. \mm
- 50. \mm 80. \mm
- 30. \mm 120. \mm
- 60. \mm 60. \mm
- 30. \mm 120. \mm
- 20. \mm 140. \mm
- 0. \mm 180. \mm
- 70. \mm 30. \mm
- 70. \mm 30. \mm
- 70. \mm 30. \mm
+\score{
+ <
+ \lyric \type Lyrics <
+ \multi 2 <
+% huh?
+% \global
+ {
+ \oden
+ \oden
+ \ugloeit
+ \oden
+ }
+ >
+ >
+ \melodic \type Staff <
+ \multi 2 <
+ \global
+ {
+ \oboom
+ \oboom
+ \bos
+ \oboom
+ }
+ >
+ >
+ >
+ \paper{
+ \paper_twenty
+ indent = 20. \mm;
+ \shape = 70. \mm 20. \mm
+ 65. \mm 30. \mm
+ 57.5 \mm 45. \mm
+ 50. \mm 60. \mm
+ 42.5 \mm 75. \mm
+ 35. \mm 90. \mm
+ 27.5 \mm 105. \mm
+ 20. \mm 120. \mm
+ 10. \mm 140. \mm
+% 0. \mm 160. \mm
+ 65. \mm 30. \mm
;
- \shape = 80. \mm 20. \mm
- 70. \mm 40. \mm
- 60. \mm 60. \mm
- 50. \mm 80. \mm
- 40. \mm 100. \mm
- 30. \mm 120. \mm
- 20. \mm 140. \mm
- 10. \mm 160. \mm
-% 00. \mm 180. \mm
- 75. \mm 30. \mm
- ;
-%}
gourlay_maxmeasures = 30.;
-% arithmetic_basicspace = 1.2;
-% arithmetic_multiplier = 2.8\pt;
+% uhuh, loop if you comment these in
+% arithmetic_basicspace = 3.8;
+% arithmetic_multiplier = 8.\pt;
}
\midi{
\tempo 4 = 90;
}
}
+%}
return str;
}
-#if 0
-int
-Duration_convert::dur2_i (Duration dur, int division_1_i)
-{
- return dur2_mom (dur) * Moment (division_1_i);
-}
-#endif
-
int
Duration_convert::dur2ticks_i (Duration dur)
{
return mom * plet_factor_mom (dur);
}
-#if 0
-Moment
-Duration_convert::i2_mom (int time_i, int division_1_i)
-{
- if (!time_i)
- return Moment (0);
-
- if (division_1_i > 0)
- return Moment (time_i, division_1_i);
- else
- return Moment (-division_1_i, time_i);
-}
-#endif
-
Duration
Duration_convert::mom2_dur (Moment mom)
{
Duration
Duration_convert::ticks2_dur (int ticks_i)
{
- // Duration dur (4, 0);
- // dur.set_plet (ticks_i, Duration::division_1_i_s / 4);
-
Moment mom (ticks_i, Duration::division_1_i_s);
if (midi_as_plet_b_s)
return mom2_dur (mom);
Duration dur = mom2standardised_dur (mom);
- // if (dur.mom () == mom)
if (dur.length () == mom)
return dur;
-// huh?
-#if 0
- dur.durlog_i_ = -100;
- dur.dots_i_ = 0;
- dur.set_ticks (ticks_i);
- return dur;
-#else
return mom2_dur (mom);
-#endif
}
Duration
cursor_dur_.durlog_i_ = 7;
if (Duration_convert::no_smaller_than_i_s)
cursor_dur_.durlog_i_ = Duration_convert::no_smaller_than_i_s;
- // cursor_dur_.set_plet (1, 1);
}
Duration
static int no_smaller_than_i_s;
static Array<Duration> dur_array_s;
-// /// Most used division in MIDI, all fine with me.
-// static int const division_1_c_i = 384;
-
-// /// Return (integer, division) representation.
-// static int dur2_i (Duration dur, int division_1_i = division_1_c_i );
-
/// Return number of ticks in (ticks, division_1) representation
static int dur2ticks_i (Duration dur );
/// Return Mudela string representation.
static String dur2_str (Duration dur );
-// /// Return Moment from (integer, division) representation.
-// static Moment i2_mom (int i, int division_1_i = division_1_c_i );
-
-// /// Return Moment (fraction of whole) representation, best guess.
-// static Duration mom2_dur (Moment mom );
-
/// Return duration from Moment (fraction of whole) representation.
static Duration mom2_dur (Moment mom );
(dur)
*/
struct Duration {
- /**
- Ctor of Duration.
- */
Duration ();
/// is the "plet factor" of this note != 1 ?
bool plet_b ();
MAJOR_VERSION = 0
MINOR_VERSION = 1
-PATCH_LEVEL = 45
+PATCH_LEVEL = 46
MY_PATCH_LEVEL =
Bar_engraver::Bar_engraver()
{
+ bar_p_ =0;
do_post_move_processing();
}
}
}
+void
+Bar_engraver::do_creation_processing ()
+{
+ create_bar ();
+ bar_p_->type_str_ = "";
+}
+
void
-Bar_engraver::do_process_requests()
+Bar_engraver::do_removal_processing ()
{
- if (bar_p_)
- return ;
-
+ if (bar_p_)
+ {
+ typeset_element (bar_p_);
+ bar_p_ =0;
+ }
+}
+
+void
+Bar_engraver::do_process_requests()
+{
if (bar_req_l_)
{
- create_bar ();
- bar_p_->type_str_=bar_req_l_->type_str_;
+ if (!bar_p_)
+ create_bar ();
+
+ bar_p_->type_str_ = bar_req_l_->type_str_;
}
else
{
Bar_engraver::do_post_move_processing()
{
bar_req_l_ = 0;
- bar_p_ =0;
}
void
Clef_item::read (String t)
{
- type_= t;
- if (type_ == "violin")
+ symbol_= t;
+ if (t == "violin")
y_position_i_ = -2;
- if (type_ == "alto")
+ if (t == "alto")
y_position_i_ = 0;
- if (type_ == "tenor")
+ if (t == "tenor") {
+ symbol_="alto";
y_position_i_ = 2;
- if (type_ == "bass")
+ }
+ if (t == "bass")
y_position_i_ = 2;
}
void
Molecule*
Clef_item::brew_molecule_p() const
{
- String t = type_;
+ String t = symbol_;
if (change_b_)
t += "_change";
Atom s = paper()->lookup_l ()->clef (t);
protected:
+ virtual void do_creation_processing ();
+ virtual void do_removal_processing ();
virtual bool do_try_request (Request *req_l);
virtual void do_process_requests();
virtual void do_pre_move_processing();
Molecule* brew_molecule_p() const;
public:
- String type_;
+ String symbol_;
int y_position_i_;
/// is this a change clef (smaller size)?
#include "string.hh"
#include "lily-proto.hh"
+#include "proto.hh"
+#include "plist.hh"
#include "virtual-methods.hh"
#include "moment.hh"
Maybe use base classes for RIFF files?
*/
struct Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_item (Audio_item* audio_item_l);
- virtual ~Midi_item ();
- static String i2varint_str (int i);
- void output (Midi_stream* midi_stream_l) const;
- virtual String str() const = 0;
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_item (Audio_item* audio_item_l);
+ virtual ~Midi_item ();
+ static String i2varint_str (int i);
+ virtual String str () const = 0;
- Audio_item* audio_item_l_;
- int channel_i_;
+ Audio_item* audio_item_l_;
+ int channel_i_;
private:
- Midi_item (Midi_item const&);
- Midi_item& operator =( Midi_item const&);
+ Midi_item (Midi_item const&);
+ Midi_item& operator = ( Midi_item const&);
+};
+
+/**
+ timed MIDI event
+ */
+struct Midi_event
+{
+ Midi_event (Moment delta_mom, Midi_item* mitem_l);
+ ~Midi_event ();
+ Moment delta_mom_;
+ Midi_item* mitem_p_;
+ String str () const;
};
/**
variable sized MIDI data
*/
struct Midi_chunk : Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_chunk();
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_chunk ();
- void add (String str);
- void set (String header_str, String data_str, String footer_str);
- virtual String str() const;
+ void set (String header_str, String data_str, String footer_str);
+ virtual String str () const;
+ virtual String data_str () const;
private:
- String data_str_;
- String footer_str_;
- String header_str_;
+ String data_str_;
+ String footer_str_;
+ String header_str_;
};
struct Midi_duration : public Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_duration (Real seconds_f);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_duration (Real seconds_f);
- virtual String str() const;
- Real seconds_f_;
+ virtual String str () const;
+ Real seconds_f_;
};
struct Midi_header : Midi_chunk {
- DECLARE_MY_RUNTIME_TYPEINFO;
-
- Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_header (int format_i, int tracks_i, int clocks_per_4_i);
};
/**
Change instrument event
*/
struct Midi_instrument : public Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_instrument (int channel_i, String instrument_str);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_instrument (int channel_i, String instrument_str);
- virtual String str() const;
- String instrument_str_;
+ virtual String str () const;
+ String instrument_str_;
};
struct Midi_key : public Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_key (Audio_item* audio_item_l);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_key (Audio_item* audio_item_l);
- virtual String str() const;
+ virtual String str () const;
};
struct Midi_meter : Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_meter (Audio_item* audio_item_l);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_meter (Audio_item* audio_item_l);
- virtual String str() const;
- int clocks_per_1_i_;
+ virtual String str () const;
+ int clocks_per_1_i_;
};
/**
Turn a note on (blond).
*/
struct Midi_note : public Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_note (Audio_item* audio_item_l);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_note (Audio_item* audio_item_l);
- Moment duration() const;
- int pitch_i() const;
- virtual String str() const;
+ Moment duration () const;
+ int pitch_i () const;
+ virtual String str () const;
- int const c0_pitch_i_c_ = 60;
- Byte dynamic_byte_;
+ int const c0_pitch_i_c_ = 60;
+ Byte dynamic_byte_;
};
/**
Turn a note off (dark).
*/
struct Midi_note_off : public Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_note_off (Midi_note* midi_note_l);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_note_off (Midi_note*);
- int pitch_i() const;
- virtual String str() const;
+ int pitch_i () const;
+ virtual String str () const;
- Byte aftertouch_byte_;
+ Byte aftertouch_byte_;
};
struct Midi_text : Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
+ DECLARE_MY_RUNTIME_TYPEINFO;
- enum Type {
- TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
- MARKER, CUE_POINT
- };
- Midi_text (Midi_text::Type type, String text_str);
- Midi_text (Audio_item* audio_item_l);
+ enum Type {
+ TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC,
+ MARKER, CUE_POINT
+ };
+ Midi_text (Midi_text::Type type, String text_str);
+ Midi_text (Audio_item* audio_item_l);
- virtual String str() const;
+ virtual String str () const;
- Type type_;
- String text_str_;
+ Type type_;
+ String text_str_;
};
struct Midi_tempo : Midi_item {
- DECLARE_MY_RUNTIME_TYPEINFO;
- Midi_tempo (int per_minute_4_i);
- Midi_tempo (Audio_item* audio_item_l);
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ Midi_tempo (int per_minute_4_i);
+ Midi_tempo (Audio_item* audio_item_l);
- virtual String str() const;
+ virtual String str () const;
- int per_minute_4_i_;
+ int per_minute_4_i_;
};
struct Midi_track : Midi_chunk {
- DECLARE_MY_RUNTIME_TYPEINFO;
- int number_i_;
+ DECLARE_MY_RUNTIME_TYPEINFO;
+ int number_i_;
+ Pointer_list<Midi_event*> event_p_list_;
- Midi_track();
+ Midi_track ();
+ ~Midi_track ();
+
+ void add (Moment delta_time_mom, Midi_item* mitem_l);
+ virtual String data_str () const;
- void add (int delta_time_i, String event);
- void add (Moment delta_time_moment, Midi_item* mitem_l);
+private:
+ // copy trap
+ Midi_track (Midi_track const&);
};
#endif // MIDI_ITEM_HH
void process();
private:
- void do_start_note (Midi_note* note_l);
+ void do_start_note (Midi_note* note_p);
void do_stop_notes (Moment now_mom);
void output_event (Moment now_mom, Midi_item* l);
Span_bar_engraver();
protected:
-
+ virtual void do_creation_processing ();
+ virtual void do_removal_processing ();
virtual void acknowledge_element (Score_elem_info);
virtual void do_pre_move_processing();
virtual Span_bar* get_span_bar_p() const;
TRANSLATOR_CLONE(Staff_performer);
DECLARE_MY_RUNTIME_TYPEINFO;
- Staff_performer();
- ~Staff_performer();
+ Staff_performer ();
+ ~Staff_performer ();
- String instrument_str();
+ String new_instrument_str ();
+ String instrument_str_;
protected:
virtual void play (Audio_element* p);
- virtual void do_removal_processing();
- virtual void do_creation_processing();
+ virtual void do_removal_processing ();
+ virtual void do_creation_processing ();
+ virtual void do_process_requests ();
private:
Audio_staff* audio_staff_p_;
/** A symbol which sits along a staff.
*/
-class Staff_side : virtual Score_elem {
- Link_array<Score_elem> support_l_arr_;
-
- Interval support_height() const;
- Real get_position_f() const;
-
+class Staff_side : virtual Score_elem
+{
public:
/**
void set_staffsym (Staff_symbol * );
-
- Staff_side();
+ Staff_side ();
void add_support (Score_elem*);
DECLARE_MY_RUNTIME_TYPEINFO;
protected:
- virtual Interval symbol_height() const;
+ virtual Interval symbol_height () const;
+ virtual Real get_position_f () const;
virtual void do_substitute_dependency (Score_elem *, Score_elem*);
- virtual void do_post_processing();
+ virtual void do_post_processing ();
+ Interval support_height () const;
+
+private:
+ Link_array<Score_elem> support_l_arr_;
+// Interval support_height () const;
};
#endif // STAFF_SIDE_HH
#include "lily-proto.hh"
#include "input.hh"
-class Text_def : public General_script_def {
-protected:
-// huh? move to public
-// virtual Atom get_atom (Paper_def* p, Direction dir_) const;
+class Text_def : public General_script_def
+{
+public:
DECLARE_MY_RUNTIME_TYPEINFO;
VIRTUAL_COPY_CONS(Text_def,General_script_def);
-public:
+
/**
centered , or aligned?
/**
print a fixed width text above or below the staff.
*/
-class Text_item : public Item ,public Staff_side{
- void init (Text_def* tdef_l);
-
+class Text_item : public Item ,public Staff_side
+{
+public:
public:
/// do I have width?
/* ***************/
- Text_item (General_script_def*,Direction dir=0);
- virtual ~Text_item();
+ Text_item (General_script_def* ,Direction dir=0);
+ virtual ~Text_item ();
DECLARE_MY_RUNTIME_TYPEINFO;
protected:
- General_script_def * tdef_p_;
+ // ugh: so, are we a text-def, or can this vary?
+ General_script_def* tdef_p_;
+
+ virtual Interval symbol_height () const;
- virtual Interval symbol_height() const;
+ virtual Molecule* brew_molecule_p () const;
+ virtual void do_pre_processing ();
+ virtual Real get_position_f () const;
- virtual Molecule* brew_molecule_p() const;
- virtual void do_pre_processing();
+private:
+// void init (Text_def* tdef_l);
};
#include "proto.hh"
#include "plist.hh"
+#include "pcursor.hh"
#include "debug.hh"
#include "misc.hh"
#include "string.hh"
#include "midi-stream.hh"
#include "audio-item.hh"
-IMPLEMENT_IS_TYPE_B(Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_chunk, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_duration, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_header, Midi_chunk);
-IMPLEMENT_IS_TYPE_B1(Midi_instrument, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_key,Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_meter, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_note, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_note_off, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_tempo, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_text, Midi_item);
-IMPLEMENT_IS_TYPE_B1(Midi_track, Midi_chunk);
-
-Midi_chunk::Midi_chunk()
+IMPLEMENT_IS_TYPE_B (Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_chunk, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_duration, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_header, Midi_chunk);
+IMPLEMENT_IS_TYPE_B1 (Midi_instrument, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_key,Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_meter, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_note, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_note_off, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_tempo, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_text, Midi_item);
+IMPLEMENT_IS_TYPE_B1 (Midi_track, Midi_chunk);
+
+Midi_chunk::Midi_chunk ()
: Midi_item (0)
{
}
-void
-Midi_chunk::add (String str)
-{
- data_str_ += str;
-}
-
void
Midi_chunk::set (String header_str, String data_str, String footer_str)
{
}
String
-Midi_chunk::str() const
+Midi_chunk::data_str () const
+{
+ return data_str_;
+}
+
+String
+Midi_chunk::str () const
{
String str = header_str_;
- String length_str = String_convert::i2hex_str (data_str_.length_i() + footer_str_.length_i (), 8, '0');
+ String length_str = String_convert::i2hex_str (data_str_.length_i ()
+ + footer_str_.length_i (), 8, '0');
length_str = String_convert::hex2bin_str (length_str);
str += length_str;
- str += data_str_;
+ str += data_str ();
str += footer_str_;
return str;
}
}
String
-Midi_duration::str() const
+Midi_duration::str () const
{
return String ("<duration: ") + String (seconds_f_) + ">";
}
+Midi_event::Midi_event (Moment delta_mom, Midi_item* mitem_p)
+{
+ delta_mom_ = delta_mom;
+ mitem_p_ = mitem_p;
+}
+
+Midi_event::~Midi_event ()
+{
+// uhuh
+// delete mitem_p_;
+}
+
+String
+Midi_event::str () const
+{
+ int delta_i = delta_mom_ * Moment (Duration::division_1_i_s);
+ String delta_str = Midi_item::i2varint_str (delta_i);
+ String mitem_str = mitem_p_->str ();
+ assert (mitem_str.length_i ());
+ return delta_str + mitem_str;
+}
+
+
Midi_header::Midi_header (int format_i, int tracks_i, int clocks_per_4_i)
- : Midi_chunk()
+ : Midi_chunk ()
{
String str;
: Midi_item (0)
{
instrument_str_ = instrument_str;
- instrument_str_.to_lower();
+ instrument_str_.to_lower ();
channel_i_ = channel_i;
}
}
String
-Midi_instrument::str() const
+Midi_instrument::str () const
{
Byte program_byte = 0;
for (int i = 0; instrument_name_sz_a_[i]; i++)
break;
}
- String str = String ((char)(0xc0 + channel_i_));
- str += String ((char)program_byte);
+ String str = String ( (char) (0xc0 + channel_i_));
+ str += String ( (char)program_byte);
return str;
}
channel_i_ = 0;
}
-void
-Midi_item::output (Midi_stream* midi_stream_l) const
-{
- *midi_stream_l << str();
-}
-
String
Midi_item::i2varint_str (int i)
{
int buffer_i = i & 0x7f;
- while ((i >>= 7) > 0)
+ while ( (i >>= 7) > 0)
{
buffer_i <<= 8;
buffer_i |= 0x80;
}
String
-Midi_key::str() const
+Midi_key::str () const
{
- Key_change_req* k = audio_item_l_->req_l_->command()->keychange ();
- int sharps_i = k->sharps_i();
- int flats_i = k->flats_i();
+ Key_change_req* k = audio_item_l_->req_l_->command ()->keychange ();
+ int sharps_i = k->sharps_i ();
+ int flats_i = k->flats_i ();
// midi cannot handle non-conventional keys
if (flats_i && sharps_i)
String str = "ff5902";
str += String_convert::i2hex_str (accidentals_i, 2, '0');
- int minor_i = k->minor_b();
+ int minor_i = k->minor_b ();
str += String_convert::i2hex_str (minor_i, 2, '0');
return String_convert::hex2bin_str (str);
}
}
String
-Midi_meter::str() const
+Midi_meter::str () const
{
- Meter_change_req* m = audio_item_l_->req_l_->command()->meterchange ();
+ Meter_change_req* m = audio_item_l_->req_l_->command ()->meterchange ();
int num_i = m->beats_i_;
int den_i = m->one_beat_i_;
String str = "ff5804";
str += String_convert::i2hex_str (num_i, 2, '0');
- str += String_convert::i2hex_str (intlog2(den_i) , 2, '0');
+ str += String_convert::i2hex_str (intlog2 (den_i) , 2, '0');
str += String_convert::i2hex_str (clocks_per_1_i_, 2, '0');
str += String_convert::i2hex_str (8, 2, '0');
return String_convert::hex2bin_str (str);
}
Moment
-Midi_note::duration() const
+Midi_note::duration () const
{
- return audio_item_l_->req_l_->musical()->rhythmic ()->duration ();
+ return audio_item_l_->req_l_->musical ()->rhythmic ()->duration ();
}
int
-Midi_note::pitch_i() const
+Midi_note::pitch_i () const
{
- return audio_item_l_->req_l_->musical()->melodic ()->pitch ();
+ return audio_item_l_->req_l_->musical ()->melodic ()->pitch ();
}
String
-Midi_note::str() const
+Midi_note::str () const
{
- if (pitch_i() == INT_MAX)
+ if (pitch_i () == INT_MAX)
return String ("");
- Byte status_byte = (char)(0x90 + channel_i_);
+ Byte status_byte = (char) (0x90 + channel_i_);
- String str = String ((char)status_byte);
- str += (char)(pitch_i() + c0_pitch_i_c_);
+ String str = String ( (char)status_byte);
+ str += (char) (pitch_i () + c0_pitch_i_c_);
// poor man's staff dynamics:
- str += (char)(dynamic_byte_ - 0x10 * channel_i_);
+ str += (char) (dynamic_byte_ - 0x10 * channel_i_);
return str;
}
}
int
-Midi_note_off::pitch_i() const
+Midi_note_off::pitch_i () const
{
- return audio_item_l_->req_l_->musical()->melodic ()->pitch ();
+ return audio_item_l_->req_l_->musical ()->melodic ()->pitch ();
}
String
-Midi_note_off::str() const
+Midi_note_off::str () const
{
- if (pitch_i() == INT_MAX)
+ if (pitch_i () == INT_MAX)
return String ("");
- Byte status_byte = (char)(0x80 + channel_i_);
+ Byte status_byte = (char) (0x80 + channel_i_);
- String str = String ((char)status_byte);
- str += (char)(pitch_i() + Midi_note::c0_pitch_i_c_);
+ String str = String ( (char)status_byte);
+ str += (char) (pitch_i () + Midi_note::c0_pitch_i_c_);
str += (char)aftertouch_byte_;
return str;
}
Midi_tempo::Midi_tempo (Audio_item* audio_item_l)
: Midi_item (audio_item_l)
{
- per_minute_4_i_ = ((Audio_tempo*)audio_item_l_)->per_minute_4_i_;
+ per_minute_4_i_ = ( (Audio_tempo*)audio_item_l_)->per_minute_4_i_;
}
Midi_tempo::Midi_tempo (int per_minute_4_i)
}
String
-Midi_tempo::str() const
+Midi_tempo::str () const
{
int useconds_per_4_i = 60 * (int)1e6 / per_minute_4_i_;
String str = "ff5103";
Midi_text::Midi_text (Audio_item* audio_item_l)
: Midi_item (audio_item_l)
{
- text_str_ = ((Audio_text*)audio_item_l_)->text_str_;
- type_ = (Type)((Audio_text*)audio_item_l_)->type_;
+ text_str_ = ( (Audio_text*)audio_item_l_)->text_str_;
+ type_ = (Type) ( (Audio_text*)audio_item_l_)->type_;
}
Midi_text::Midi_text (Midi_text::Type type, String text_str)
}
String
-Midi_text::str() const
+Midi_text::str () const
{
String str = "ff" + String_convert::i2hex_str (type_, 2, '0');
str = String_convert::hex2bin_str (str);
- str += i2varint_str (text_str_.length_i());
+ str += i2varint_str (text_str_.length_i ());
str += text_str_;
return str;
}
-Midi_track::Midi_track()
- : Midi_chunk()
+Midi_track::Midi_track ()
+ : Midi_chunk ()
{
// 4D 54 72 6B MTrk
// 00 00 00 3B chunk length (59)
}
void
-Midi_track::add (int delta_time_i, String event_str)
+Midi_track::add (Moment delta_time_mom, Midi_item* mitem_p)
{
- if (delta_time_i < 0)
+ assert (delta_time_mom >= 0);
+ event_p_list_.bottom ().add (new Midi_event (delta_time_mom, mitem_p));
+}
+
+String
+Midi_track::data_str () const
+{
+ String str = Midi_chunk::data_str ();
+ if (check_debug && !monitor->silent_b ("Midistrings"))
+ str += "\n";
+ for (PCursor<Midi_event*> i (event_p_list_); i.ok (); i++)
{
- cout << String_convert::bin2hex_str (i2varint_str (delta_time_i)) << endl;
- cout << String_convert::bin2hex_str (event_str) << endl;
+ str += i->str ();
+ if (check_debug && !monitor->silent_b ("Midistrings"))
+ str += "\n";
}
- assert (delta_time_i >= 0);
- assert (event_str.length_i());
- Midi_chunk::add (i2varint_str (delta_time_i) + event_str);
+ return str;
}
-void
-Midi_track::add (Moment delta_time_moment, Midi_item* mitem_l)
+Midi_track::~Midi_track ()
{
- // use convention of 384 clocks per 4
- // use Duration_convert
- int delta_time_i = delta_time_moment * Moment (384) / Moment (1, 4);
- // ? int (delta_time_moment * 4 * 384)
- add (delta_time_i, mitem_l->str());
}
-
{
filename_str_ = filename_str;
os_p_ = 0;
- open();
+ open ();
}
-Midi_stream::~Midi_stream()
+Midi_stream::~Midi_stream ()
{
*os_p_ << flush; // ugh. Share with tex_stream.
if (!*os_p_)
{
- warning(_("error syncing file (disk full?)"));
+ warning (_ ("error syncing file (disk full?)"));
exit_status_i_ = 1;
}
delete os_p_;
}
Midi_stream&
-Midi_stream::operator <<(String str)
+Midi_stream::operator << (String str)
{
- if (check_debug && !monitor->silent_b("Midistrings"))
- str = String_convert::bin2hex_str (str);
-
*os_p_ << str;
-
- if (check_debug && !monitor->silent_b ("Midistrings"))
- *os_p_ << "\n";
-
return *this;
}
Midi_stream&
-Midi_stream::operator <<(Midi_item const& mitem_c_r)
+Midi_stream::operator << (Midi_item const& mitem_c_r)
{
- // *this << mitem_c_r.str();
- mitem_c_r.output (this);
- if (check_debug && !monitor->silent_b("Midistrings"))
- *os_p_ << "\n";
+// *this <<mitem_c_r.str ();
+ String str = mitem_c_r.str ();
+ if (check_debug && !monitor->silent_b ("Midistrings"))
+ {
+ str = String_convert::bin2hex_str (str) + "\n";
+ // ugh, should have separate debugging output with Midi*::print routines
+ int i = str.index_i ("0a");
+ while (i >= 0)
+ {
+ str[i] = '\n';
+ str[i + 1] = '\t';
+ i = str.index_i ("0a");
+ }
+ }
+
+ *os_p_ << str;
return *this;
}
Midi_stream&
-Midi_stream::operator <<(int i)
+Midi_stream::operator << (int i)
{
// output binary string ourselves
*this << Midi_item::i2varint_str (i);
}
void
-Midi_stream::open()
+Midi_stream::open ()
{
os_p_ = new ofstream (filename_str_.ch_C ());
if (!*os_p_)
- error (_("can't open `") + filename_str_ + "\'");
+ error (_ ("can't open `") + filename_str_ + "\'");
}
Find out if start_note event is needed, and do it if needed.
*/
void
-Midi_walker::do_start_note (Midi_note* note_l)
+Midi_walker::do_start_note (Midi_note* note_p)
{
- Moment stop_mom = note_l->duration() + ptr ()->audio_column_l_->at_mom ();
+ Moment stop_mom = note_p->duration() + ptr ()->audio_column_l_->at_mom ();
for (int i=0; i < stop_note_queue.size(); i++)
{
- if (stop_note_queue[ i ].val->pitch_i() == note_l->pitch_i ())
+ if (stop_note_queue[ i ].val->pitch_i() == note_p->pitch_i ())
{
if (stop_note_queue[ i ].key < stop_mom)
stop_note_queue[ i ].ignore_b_ = true;
}
Midi_note_event e;
- e.val = new Midi_note_off (note_l);
+ e.val = new Midi_note_off (note_p);
e.key = stop_mom;
stop_note_queue.insert (e);
- output_event (ptr()->audio_column_l_->at_mom (), note_l);
+ output_event (ptr()->audio_column_l_->at_mom (), note_p);
}
/**
continue;
Moment stop_mom = e.key;
- Midi_note_off* note_l = e.val;
+ Midi_note_off* note_p = e.val;
- output_event (stop_mom, note_l);
+ output_event (stop_mom, note_p);
}
}
output_event (ptr()->audio_column_l_->at_mom (), p);
else
do_start_note ((Midi_note*)p);
-
- delete p;
}
Score::Score (Score const &s)
{
- music_p_ = s.music_p_->clone();
+ music_p_ = (s.music_p_) ? s.music_p_->clone() : 0;
for (int i=0; i < s.def_p_arr_.size (); i++)
def_p_arr_.push(s.def_p_arr_[i]->clone());
- header_p_ = new Header (*s.header_p_);
+
+ header_p_ = (s.header_p_) ? new Header (*s.header_p_): 0;
}
Score::~Score()
return new Span_bar;
}
+
+void
+Span_bar_engraver::do_creation_processing ()
+{
+}
+
+void
+Span_bar_engraver::do_removal_processing ()
+{
+}
+
void
Span_bar_engraver::acknowledge_element (Score_elem_info i)
{
spanbar_p_ =0;
}
bar_l_arr_.set_size (0);
-
}
Spring_spacer::make_constraints (Mixed_qp& lp) const
{
int dim=cols.size();
- Real nw_f = paper_l ()->note_width ();
for (int j=0; j < dim; j++)
{
Colinfo c=cols[j];
dist = dist >? minimum;
}
+ // ugh: never let columns touch... try to set over here...
+ // ugh: use j iso i triggers ice in gcc-2.7.2.3
+ cols[i].width_[LEFT] -= nw_f / 4;
ideal_arr_[i] = dist;
}
}
#include "audio-item.hh"
#include "audio-staff.hh"
-IMPLEMENT_IS_TYPE_B1(Staff_performer,Performer_group_performer);
-ADD_THIS_TRANSLATOR(Staff_performer);
+IMPLEMENT_IS_TYPE_B1 (Staff_performer,Performer_group_performer);
+ADD_THIS_TRANSLATOR (Staff_performer);
-Staff_performer::Staff_performer()
+Staff_performer::Staff_performer ()
{
audio_staff_p_ = 0;
}
-Staff_performer::~Staff_performer()
+Staff_performer::~Staff_performer ()
{
delete audio_staff_p_;
}
void
-Staff_performer::do_creation_processing()
+Staff_performer::do_creation_processing ()
{
audio_staff_p_ = new Audio_staff;
- if (instrument_str().length_i())
- {
- // staff name
- play (new Audio_text (Audio_text::TRACK_NAME, id_str_));
- // instrument description
- play (new Audio_text (Audio_text::INSTRUMENT_NAME, instrument_str ()));
- }
+ play (new Audio_text (Audio_text::TRACK_NAME, id_str_));
+
+#if 1
+ String str = new_instrument_str ();
+ if (str.length_i ())
+ // instrument description
+ play (new Audio_text (Audio_text::INSTRUMENT_NAME, str));
+#endif
// tempo
play (new Audio_tempo (get_tempo_i ()));
- if (instrument_str ().length_i ())
+#if 1
+ if (str.length_i ())
// instrument
- play (new Audio_instrument (instrument_str ()));
+ play (new Audio_instrument (str));
+#endif
+
Performer_group_performer::do_creation_processing ();
}
void
-Staff_performer::do_removal_processing()
+Staff_performer::do_process_requests ()
+{
+ String str = new_instrument_str ();
+ if (str.length_i ())
+ {
+ play (new Audio_text (Audio_text::INSTRUMENT_NAME, str));
+ play (new Audio_instrument (str));
+ }
+ Performer_group_performer::do_process_requests ();
+}
+
+
+void
+Staff_performer::do_removal_processing ()
{
Performer_group_performer::do_removal_processing ();
Performer::play (audio_staff_p_);
}
String
-Staff_performer::instrument_str()
+Staff_performer::new_instrument_str ()
{
// mustn't ask Score for instrument: it will return piano!
- return get_property ("instrument");
+ String str = get_property ("instrument");
+ if (str == instrument_str_)
+ return "";
+
+ instrument_str_ = str;
+
+ return instrument_str_;
/* ugh, but can't
if (properties_dict_.elt_b ("instrument"))
void
Staff_performer::play (Audio_element* p)
{
- if (p->is_type_b (Audio_item::static_name()))
+ if (p->is_type_b (Audio_item::static_name ()))
{
- audio_staff_p_->add ((Audio_item*)p);
+ audio_staff_p_->add ( (Audio_item*)p);
}
Performer::play (p);
}
}
Real
-Staff_side::get_position_f() const
+Staff_side::get_position_f () const
{
if (!dir_)
{
- warning (_("Staff_side::get_position_i(): "
+ warning (_("Staff_side::get_position_f(): "
"somebody forgot to set my vertical direction, returning -20"));
return -20;
}
Real inter_f = paper()-> internote_f ();
Interval v= support_height();
-// y = v[dir_] + 2*dir_*inter_f; // ugh
- y = v[dir_]; // ugh
+ y = v[dir_] + 2 * dir_ * inter_f; // ugh
return y;
}
#include "audio-column.hh"
#include "audio-item.hh"
#include "audio-staff.hh"
+#include "midi-item.hh"
#include "pcursor.tcc"
#include "plist.tcc"
template POINTERLIST_INSTANTIATE(Audio_element);
template POINTERLIST_INSTANTIATE(Audio_column);
-
+template POINTERLIST_INSTANTIATE(Midi_event);
#include "stem.hh"
#include "molecule.hh"
#include "lookup.hh"
+#include "debug.hh"
-Text_item::Text_item (General_script_def*tdef_l, Direction d)
+Text_item::Text_item (General_script_def* tdef_l, Direction d)
{
dir_ = d;
fat_b_ = false;
- tdef_p_ = tdef_l->clone();
+ tdef_p_ = tdef_l->clone ();
}
-Text_item::~Text_item()
+Text_item::~Text_item ()
{
delete tdef_p_;
}
void
-Text_item::do_pre_processing()
+Text_item::do_pre_processing ()
{
if (!dir_)
dir_ = DOWN;
}
+Real
+Text_item::get_position_f () const
+{
+ // uhuh, tdef/gdef?
+ if ( (tdef_p_->name () != Text_def::static_name ())
+ || ( ( (Text_def*)tdef_p_)->style_str_ != "finger"))
+ return Staff_side::get_position_f ();
+
+ if (!dir_)
+ {
+ warning (_ ("Text_item::get_position_f(): "
+ "somebody forgot to set my vertical direction, returning -20"));
+ return -20;
+ }
+
+ Interval v = support_height ();
+ // add no extra: fingers should be just above note, no?
+ return v[dir_];
+}
+
Interval
-Text_item::symbol_height() const
+Text_item::symbol_height () const
{
- return tdef_p_->get_atom (paper(), dir_).dim_.y ();
+ return tdef_p_->get_atom (paper (), dir_).dim_.y ();
}
Molecule*
-Text_item::brew_molecule_p() const
+Text_item::brew_molecule_p () const
{
- Atom a (tdef_p_->get_atom (paper(), dir_));
+ Atom a (tdef_p_->get_atom (paper (), dir_));
/*
if (fat_b_)
- a.sym.dim.x = tdef_p_->width (paper());
+ a.sym.dim.x = tdef_p_->width (paper ());
*/
Molecule* mol_p = new Molecule (a);
if (dir_<0) // should do something better anyway.
- mol_p->translate_axis (-mol_p->extent().y ().left , Y_AXIS);
+ mol_p->translate_axis (-mol_p->extent ().y ().left , Y_AXIS);
mol_p->translate_axis (y_, Y_AXIS);
return mol_p;
}
-IMPLEMENT_IS_TYPE_B1(Text_item,Item);
+IMPLEMENT_IS_TYPE_B1 (Text_item,Item);
Begin3
Titel: LilyPond
-Versie: 0.1.45
-Inschrijf datum: 11FEB98
+Versie: 0.1.46
+Inschrijf datum: 17FEB98
Beschrijving: LilyPond is de muziek typesetter van het GNU Project.
Het programma genereert muziek in zichtbare of
hoorbare vorm uit uit een muzikale definitie file:
jan@digicash.com (Jan Nieuwenhuizen)
Onderhouden door: hanwen@stack.nl (Han-Wen Nienhuys)
Voornaamste plek: sunsite.unc.edu /pub/Linux/apps
- 395k lilypond-0.1.45.tar.gz
+ 395k lilypond-0.1.46.tar.gz
Oorspronkelijke plek: pcnov095.win.tue.nl /pub/lilypond/
- 395k lilypond-0.1.45.tar.gz
+ 395k lilypond-0.1.46.tar.gz
Copi"eer politie: GPL
End
Begin3
Title: LilyPond
-Version: 0.1.45
-Entered-date: 11FEB98
+Version: 0.1.46
+Entered-date: 17FEB98
Description: LilyPond is the GNU Project music typesetter. The program
generates visual or auditive output from a music
definition file: it can typeset formatted sheet music
jan@digicash.com (Jan Nieuwenhuizen)
Maintained-by: hanwen@stack.nl (Han-Wen Nienhuys)
Primary-site: sunsite.unc.edu /pub/Linux/apps/sound/convert
- 470k lilypond-0.1.45.tar.gz
+ 470k lilypond-0.1.46.tar.gz
Original-site: pcnov095.win.tue.nl /pub/lilypond/development/
- 470k lilypond-0.1.45.tar.gz
+ 470k lilypond-0.1.46.tar.gz
Copying-policy: GPL
End
Name: lilypond
-Version: 0.1.45
+Version: 0.1.46
Release: 1
Copyright: GPL
Group: Applications/Publishing
-Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.45.tar.gz
+Source0: alpha.gnu.org:/gnu/lilypond/development/lilypond-0.1.46.tar.gz
Summary: A program for typesetting music.
URL: http://www.stack.nl/~hanwen/lilypond
Packager: Han-Wen Nienhuys <hanwen@stack.nl>
make -C Documentation gifs
make prefix="$RPM_BUILD_ROOT/usr" install
%files
-%doc Documentation/out/AUTHORS.txt Documentation/out/CodingStyle.txt Documentation/out/INSTALL.txt Documentation/out/MANIFESTO.txt Documentation/out/convert-mudela.txt Documentation/out/faq.txt Documentation/out/gnu-music.txt Documentation/out/index.txt Documentation/out/internals.txt Documentation/out/language.txt Documentation/out/lilypond.txt Documentation/out/links.txt Documentation/out/literature.txt Documentation/out/ly2dvi.txt Documentation/out/mi2mu.txt Documentation/out/mudela-book.txt Documentation/out/mutopia.txt Documentation/out/other-packages.txt BUGS TODO NEWS DEDICATION ANNOUNCE README
+%doc Documentation/out/ANNOUNCE.txt Documentation/out/AUTHORS.txt Documentation/out/CodingStyle.txt Documentation/out/DEDICATION.txt Documentation/out/INSTALL.txt Documentation/out/MANIFESTO.txt Documentation/out/NEWS.txt Documentation/out/TODO.txt Documentation/out/cadenza.ly.txt Documentation/out/collisions.ly.txt Documentation/out/convert-mudela.txt Documentation/out/faq.txt Documentation/out/font16.ly.txt Documentation/out/font20.ly.txt Documentation/out/gallina.ly.txt Documentation/out/gnu-music.txt Documentation/out/index.txt Documentation/out/internals.txt Documentation/out/language.txt Documentation/out/lilypond.txt Documentation/out/links.txt Documentation/out/literature.txt Documentation/out/ly2dvi.txt Documentation/out/mi2mu.txt Documentation/out/mudela-book.txt Documentation/out/multi.ly.txt Documentation/out/mutopia.txt Documentation/out/other-packages.txt Documentation/out/preludes-1.ly.txt Documentation/out/preludes-2.ly.txt Documentation/out/rhythm.ly.txt Documentation/out/scsii-menuetto.ly.txt Documentation/out/standje.ly.txt Documentation/out/toccata-fuga-E.ly.txt Documentation/out/twinkle-pop.ly.txt Documentation/out/twinkle.ly.txt Documentation/out/wtk1-fugue2.ly.txt Documentation/out/wtk1-prelude1.ly.txt BUGS TODO NEWS DEDICATION ANNOUNCE README
%doc input/beams.ly input/cadenza.ly input/collisions.ly input/coriolan-alto.ly input/denneboom.ly input/font-body.ly input/font.ly input/font11.ly input/font13.ly input/font16.ly input/font20.ly input/font26.ly input/gourlay.ly input/keys.ly input/kortjakje.ly input/multi.ly input/pedal.ly input/rhythm.ly input/scales.ly input/scripts.ly input/sleur.ly input/slurs.ly input/spacing.ly input/stem.ly input/toccata-fuga-E.ly input/twinkle-pop.ly input/twinkle.ly Documentation/mudela-course.doc Documentation/mudela-man.doc
%doc Documentation/out/lelie_logo.gif
/usr/bin/convert-mudela
s('bes d g)
- s(c fis a -"poco\\_a\\_poco\\_cresc.")
+ s(c fis a -"poco a poco cresc.")
s(d g bes)
s(d fis c')
s('fis 'a c)
s('fis 'a c)
r16\p ['g 'a c] ['b 'g 'b 'g] r 'g r 'g
- s('a c fis -"poco\\_cresc.")
+ s('a c fis -"poco cresc.")
s(c fis a)
s('b d g)
s('b d f -"dim.")
['a-4_"dim." 'g-1 'a 'b] ['a-2 c-4 'b 'a]
['g-1 'fis-2 'g-3 'a] ['g-3 'b 'a 'g] |
\stemup
- )'fis4\p r16 [''b-1\< d-2 ''b~] <'g4-5 'e-3 ''b>
- r16 ['cis-1 'e-2 \!cis] | % cis wants ~
-
+ )'fis4\p
+ \skip 4*7; |
+ d4.\mf cis8-"4\\_5" ~ cis 'b4-5 'a8-"4\\_5" ~ |
+ \textstyle "italic";
+ 'a 'g4-5 'fis8-4 ~ ['fis16 'fis-4-"dim." 'e-3 'd-2]
+ \textstyle "finger";
+ 'e4-"3\\_5" ~ |
+ ['e16 'e-5 'd 'cis] 'd4-5 ~ ['d16 'd-5 'cis ''b] 'cis4-5 |
+ \stemboth
+ [''fis16-1\p ''a-2 'd-5\< 'c-4] [''b-1 'd-2 'g-5 'fis-4]
+ ['d-1 'b-5 'a 'g] ['fis-2 'e-1 'd-4 \!'c!-3] |
+ [''b-2 'd-1 'g 'a] ['fis32 'g 'fis16] ['e16-4 'd-3]
+ ['d8. 'e16~] ['e 'd8 'cis16] |
+ \stemup
+ r16 ['d-1\< 'fis 'd] ['g 'a 'b 'g-1] [c-3 'b c d] [c e d-4 \!c] |
+ 'b4-5 'a ~ ['a8 'g-5 ~] ['g16 'fis8-4 'e'16-3] |
+ ['fis8-4 'e-5~] ['e 'd-5~] 'd4 'cis-4 |
+ 'd2\p-"rall." ~ ['d16 ''a-2( ''b-3 'cis-4] )'d4-5 |
}
two = \melodic{
+ \octave c;
\textstyle "finger";
% ugh: koor
% \translator Staff=bass \octave c; \stemup
e'4 d' ~ [d'16 d-1 cis'-2 g-1] cis'4-2 ~ |
[c'8 a-3] d'4.-1 d'4-> cis'8-2 |
\translator Staff=treble \octave c''; \stemdown
- 'd4 \skip 4*3; |
+ 'd4
+ \stemboth
+ r16 [''b-1\< d-2 ''b~] <'g4-5 'e-3 ''b>
+ r16 ['cis-1 'e-2 \!'cis~] |
+ <'a4-5 'f-3 'cis> r16 ['d-1 'fis-2 'd~] <'b4-5 'g-3 'd>
+ r16 ['fis-1 'a 'fis~] |
+ \stemdown
+ 'fis4 'e 'd 'cis |
+ ''b ''a ''b4. ''b8 |
+ ''a4
+ \translator Staff=bass \octave c; \stemup
+ r16 [b-3 fis-1 a-2] g4-1 r16 [a-3 e-1 g-2] |
+ \skip 4*4; \skip 16*1;
+ \translator Staff=treble \octave c''; \stemdown
+ 'd8.-1 ~ ['d8 'c] 'd4 [''a8 ''g] |
+ \translator Staff=bass \octave c; \stemup
+ [fis'8 c'-1] b4-1 <a
+ \translator Staff=treble \octave c''; \stemdown
+ ''a4.-2>
+ \stemdown
+ 'a8~ |
+ ['a 'g-3~] ['g16 'e 'fis8~] ['fis16 'd8.~] ['d8. cis!16] |
+ \translator Staff=bass \octave c; \stemup
+% <[d'8-2 a-1> <a~ g]> <a4 [fis16-2> e-1 fis-2 d-1]
+ \multi 2 <
+ {
+ [d'8-2 a~] a4
+ }
+ {
+ \property Voice.hshift = 1
+ [a8-1 g] [fis16-2 e-1 fis-2 d-1]
+ \property Voice.hshift = 0
+ }
+ >
+ [g-1 fis-2 g-1 a-2] [g-1 b-3 a-2 g-1 ~] |
+ [g g-1 fis-2 e-1] fis-2 ~ fis2
}
three = \melodic{
\octave c;
\stemdown;
d4-3 c-4 'b e-3 |
- a16 ['a-5\mf( c-3 'a-5] [d-2 e-1 fis-2 d-4]
+ a16 ['a-5\mf( cis-3 'a-5] [d-2 e-1 fis-2 d-4]
[g-1 fis-3 g a] [g b a g] |
)fis4 fis e a-4 |
- d'16 \stemboth [d-5\f( fis-3 d-5] [a-2 b-1 c'-2 a-4]
- [d'-1 c'-3 d' e'] [d'-4 fis'-2 e'-1 ) d'] |
+ d'16 \stemboth [d-5\f( fis-3 d-5] [a-2 b-1 cis'-2 a-4]
+ [d'-1 cis'-3 d' e'] [d'-4 fis'-2 e'-1 ) d'] |
[cis'-3 b-4 cis'-3 d'-2] [c'-4 e'-2 d'-3 c'-4]
\stemdown b4-5 [cis'8-4 b-3(] |
[a-4 )fis-5 b-2 a-3] [gis-4 e-5 a-3 g-4] |
\stemboth
r16 [d-4( fis-2 d-4] [)g8-.-1 'g-.-5]
r16 [e-4( g-2 e-4] [)a8-. 'a-.-5] |
+ r16 [fis-4( a fis] [)b8-. 'b-.] r16 [g-4( b g] [)d'8-. d-.] |
+ r16 ['d16-5( 'fis-3 'd] ['a-2 'b-1 cis-2 'a-4] [d 'b-5 d-3 'b]
+ [fis-2 g a-2 fis-4] |
+ )fis16 ['g( 'b 'g] [d-2 e fis-2 d-4] [)g8-. 'g-.] r16 [cis-4( e cis] |
+ [)fis8-. 'fis-.] \stemdown r16 ['b-4( d 'b] [)e8-. 'e-.]
+ r16 ['a-4 cis a] |
+ \stemboth
+ [d-1 e-3 fis-2 d-4] [g-1 fis-2 e-3 d-1] [cis!-3 'a-5 'b cis]
+ [d-2 e fis-2 d-4] |
+ [g8 e-3] \stemdown [a 'a] ['b8.-4 'g16-5] a4-4 |
+ [d8-5 a-2~] [a g-3~] [g g-3] fis4-4 |
+ \stemup
+ r16 [g-2 b-1 g-3] [b'8.-1 c'16-1] [b8.-2 bes16-3] [a8-1 g] |
+ \stemdown
+ r16 ['a-2 cis!-1 a-2] [d-1 e fis d] [e8-1 d-2] [e-1 'a-2] |
+ [d 'a-2~] ['a16 'a-2 'b cis-2] d2 |
+}
+
+four = \melodic{
+ \skip 4*36;
+ \octave c';
+ \stemup;
+ \property Voice.hshift = 1
+ a2 fis |
+ d
+ \property Voice.hshift = 0
+ \skip 4*11;
+ \translator Staff=bass \octave c; \stemup
+ a4 ~ [a16 d-2 g8-1] [fis e-1] |
+ \stemdown
+ d1 ~ |
+ d ~ |
+ 'd ~
+ 'd2 'd2
}
rh = \melodic{
- \one
+ \multi 2 <
+ \one
+ \four
+ >
\bar "|.";
}
\type Staff=treble <
\global
% huh? try these iso directly!
- \lh
-% \one
-% \two
+% \lh
+ \multi 2 <
+ \one
+ \four
+ >
>
\type Staff=bass <
\global
- \rh
+% \rh
% or try \two having here, iso above!
% \two
-% \three
+ {
+ \clef "bass";
+ \multi 2 <
+ \two
+ \three
+ >
+ }
>
>
\paper{
--- /dev/null
+\header{
+filename = "preludes-5.ly";
+title = "5";
+composer = "Johann Sebastian Bach (1685-1750)";
+enteredby = "jcn";
+copyright = "public domain";
+}
+
+\include "paper20.ly"
+
+rh = \melodic{
+ \octave c';
+ \textstyle "italic";
+ [d8-1\p a-5-"legato" f-3 d-1 a-5 f-3] |
+ [d-1 a-5 f-3 d-1 a-5 f-3] |
+ [d-1\< b-4 g-2 d-1 b-4 \!g-2] |
+ [d-1 b-4 g-2 d-1 b-5 g-3] |
+ [cis-1\mf g-4 e-2 cis-1 g-4 e-2] |
+ [cis-1 b-5 g-4 e-2 a-5 g-4] |
+ [f-3\< d-1 f-2 a-4 f-1 a-2] |
+ [d'-5 a-1 d'-2 f'-4 d'-1 \!f'-2] |
+ [b'\> f'-3 e' d' c'-3 b] |
+ [a gis-3 fis e d'-5 \!b-2] |
+ \multi 2 <
+ {
+ \stemup
+% c4\mr^"(\\textsharp)"\p r r |
+% c4\mr^"(\\textsharp)" r r
+ c4^"(\\textsharp)"\p r r |
+ c4^"(\\textsharp)" r r
+ }
+ {
+ \stemdown
+ a4 r r |
+ a4 r r
+ }
+ > |
+ [a'8\mf( es'-3\> d' c' bes!-3 a] |
+ [g fis-3 e!-2 d-1 c'-4 \!a] |
+ [)bes32(\p a bes16] [d'8-5 bes-3 g-1] )g'4 |
+% r8 [d'-5( c bes a\pr g] |
+ r8 [d'-5( c bes a g] |
+ [)a-2 c'-4( a f] ) f'4 |
+% r8 [c'-5 bes a g\tr f] |
+ r8 [c'-5 bes a g f] |
+ [g-2 bes-4 a g fis-1 e-2] |
+ [f-3 d-1 f-2 a-3 d'-5 g-2] |
+ \multi 2 <
+ {
+ \stemup
+ [cis'32-4 b cis'16 e'8-5-"poco cresc." cis-3 a e' cis]
+ }
+ {
+ \stemdown
+ a4
+ }
+ >
+ \stemboth
+ [a8 e'-5 cis' a bes!-3 a] |
+ [g e'-5 cis'-3 g e'-5 cis'-3] |
+ [g-1 e'-5 cis' g a-3 g] |
+ [f-"dim." d'-5 bes f d' bes] |
+ [f d'-5 bes f d' bes] |
+ [fis-2-"dim." c'-5 a-3 fis-2 c'-5 a-3] |
+ [fis-2 c'-5 a-3 fis-2 c-5 a-3] |
+ [bes-4 g-1 fis-2 g-3 d-1 g-2] |
+ [bes-4 g-2 d-1 bes-5 g-3 d-1] |
+ [e-2\p g-4 fis-3 g-1 bes-4 g-2] |
+ [es-1 bes-4 g-2 es bes g] |
+ [cis-1 bes-4 g-2 cis bes g] |
+ [cis-1 bes-4 g-2 cis-1 a-5 g-4] |
+ [f-3 a f d a-5 f] |
+ [d-1 a-5 f-3 d-1 cis-2 d-1] |
+ [e-3\< g-5 e-3 'bes-1 g-5 e-3] |
+ ['bes-1 g-5 e-3 \!cis-2 'a-1 g-5] |
+ [f16-4\mf d-2 c-1 'bes-3] s4 s |
+% ugh
+% s1 |
+ s4 s4 s4 |
+ s4 s16 [d16-1-"m.d." f-2 a-4] [d-2-"m.g." f a] \stemup d'-1 |
+ [f' a'-4 f' d'] [f'-4 d' b d'-5] [gis-2 b a g] |
+ <g'!4.-5\f e' a> a'8-5
+ \multi 2 <
+ {
+ \stemup
+ f'4-4\> ~ | \![f'8 e'] [e'32-4 f' e'8. ~] [e'8 d'-3]
+ }
+ {
+ \stemdown
+ <d'4 a> r4 cis'-2
+ }
+ > |
+ \stemboth;
+ [d'8-4 c'!-3 a-1 d'-4 bes-2 g-1] |
+ [c'-5 a-3 fis-2 bes-4 g e ] |
+ [a-5 fis-"dim. e rall." d g-5 e cis-2] |
+ \multi 2 <
+ {
+ \stemup
+ <fis2-.-5\p 'a>
+ }
+ {
+ \stemdown
+ [d32( cis d8. ~] ) d2
+ }
+ > |
+ \bar "|.";
+}
+
+
+lh = \melodic{
+ \clef "bass";
+ \octave c;
+ [d32( cis )d8.] r4 r |
+ 'd4 r r |
+% d\mr r r |
+ d r r |
+ 'd4 r r |
+% d\mr r r |
+ d r r |
+ 'd4 r r |
+ [d8-2 'a-5 d-2 f-1 d-4 f-2] |
+ [a-1 f-4 a-2 d'-1 a-2 d'-1] |
+ gis4-3 r r |
+ e-4( )gis-2 e |
+ [a8-4 e'-1 c'-2 a-4 e'-1 c'-2 ] |
+ fis4-5 r r
+ d-4( ) fis d-5 |
+% g\mr-"(\textsharp)" r r f!8 |
+ g-"(\textsharp)" r r8 f! |
+ [e32 f e8.] r4 r |
+% f\pr r r8 e |
+ f r r8 e |
+ d4 r8 [f-1 e d] |
+ [e-2 d-3 cis-4 e-1 d-2 cis-3] |
+ d4-2( )c! 'b-4 |
+ 'a( )a a |
+ 'a( )a a |
+ 'a( )a a |
+ 'a( )a a |
+ 'b r r |
+ 'b-5( )b 'b |
+ 'a r r |
+ 'a-2( )d-1 'd |
+ 'g r r |
+ 'g( )g g |
+ 'g r r |
+ 'g( )g g |
+ 'a r r |
+ 'a( )a a |
+ 'a r r |
+ 'a( )a a |
+ 'cis r r |
+ 'cis( )cis 'cis |
+ 'd-4 s16
+ \stemdown
+ [g16-1-"m.g." f e] [f-2 a d-3 f] |
+ 'a
+ \stemup
+ [d-5-"m.d." c 'bes] 'a
+ \stemdown ['g-2 'f-"m.g." 'e] ['d 'f-4 'a-2 d-1] |
+ \stemup
+% [f-2\ped a]
+ [f-2-"Ped." a]
+ \stemdown
+% [d-4-"m.g." f-"cresc."] a s s8 s4\dep |
+ [d-4-"m.g." f-"cresc."] a s s8 s4-"*" |
+% ugh, whole rest has duration of one bar
+% r1 |
+ r4 r r |
+%{
+ ugh, 'forget' the 8 below:
+ [cis-3( e cis 'a] [d16-1 c 'b 'a] |
+ and lily dumps koor
+lilypond: ../flower/include/varray.hh:116: struct Rhythmic_grouping *& Array<Rhythmic_grouping *>::elem(int) const: Assertion `i >=0&&i<size_' failed.
+Aborted (core dumped)
+%}
+ [cis8-3( e cis 'a] [d16-1 c 'b 'a] |
+ [)'g8 g a-2( g-3 a-1 'a] |
+ )d4-3 d'-1 d |
+ d r r |
+ 'd( )d 'd |
+ 'd2. |
+ \bar "|.";
+}
+
+global = \melodic{
+ \meter 3/4;
+ \key bes;
+}
+
+\score{
+ % Moderato
+ % it would be nice to shut-off fingering...
+ \melodic \type Grandstaff <
+ <
+ \global
+ \rh
+ >
+ <
+ \global
+ \lh
+ >
+ >
+ \paper{
+ \paper_twenty
+ linewidth= 195.\mm;
+ }
+ \midi{
+ \tempo 4 = 90;
+ }
+}
--- /dev/null
+\header{
+filename = "preludes-6.ly";
+title = "6";
+composer = "Johann Sebastian Bach (1685-1750)";
+enteredby = "jcn";
+copyright = "public domain";
+}
+
+\include "paper20.ly"
+
+one = \melodic{
+ \octave c';
+ \skip 4*4; |
+ \stemup
+ r4 d2-5( cis4-4 |
+ \stemboth
+ [)d16-5\mf a'-4( g' f'] [e' f'-4 cis'-2 d'-1]
+ [e32-3 d e8 f16] [d'8.-1 cis'16-3] |
+ \stemup
+ )cis'4\> ~ [cis16 a \!d'8 ~] d4 c-5 |
+ b2-4 ~ b4 a-5 ~ |
+ [a16 a-5 \stemup g! f] g4-4\< ~ g f-3 ~ |
+ [\!f16 a g f] [e16 g8.-5 ~] [g16 g-5 f-4 e-3] [d-1 f8.-4 ~] |
+ [f16 f-3 e d] b4 a-5 g-5 |
+ fis4-4 g r8\<-"rall." [g16-1( bes-2] r16 [bes-2 a-2 \!g-1] |
+ ) d'1-5
+}
+
+two = \melodic{
+ \octave c';
+ r16\p [d'-5( c'-4 bes-3] [a-2 bes-3 f-1 g-2]
+ [a32-3 g a8 bes16-1] [g8. f16-1] |
+ )f2 e2 |
+ \translator Staff=bass \octave c; \stemup
+ r4 a-1 bes-2 b-1 |
+ \translator Staff=treble \octave c'; \stemdown
+ r16 [b-3 a-1 g-2] [f8. f16-2] e2 ~ |
+ e2 ~ e4 ~ [e16 e-2 f! d-1] |
+ s4 [e32 d e8.~] e4 d4 ~ |
+ d4. [cis16-2 d-1] cis4 d-1 ~ |
+ d8 r r16 [e-2 f d] r16 [e-2 f d] r [d-1 e-3 cis] |
+ r16 [e-3 d-1 c!-2] ['bes! d8.] r8 e'4-5 |
+ fis1-2
+}
+
+three = \melodic{
+ \octave c;
+ \stemup
+ f2-1( e-2 |
+ [)d16 b'( c' bes] [a-4 bes-2 f-5 g-4]
+ [a32 g a8 bes16-2]
+ [g8.-4 f16-5] |
+ )f2-5 g4-4 gis |
+ a2-2 ~ [a16 a-1( g f] [e-4 f-2 c-5 d] |
+ [e32 d e8 f16] [d8.-4 c16-5] \stemboth )c4.-5 d8-4 |
+ e4 ~ [e16 f-2( e-3 d-4] [cis 'a 'b cis-3] [d-4 e-3 f-2 d-4] |
+ \textstyle "finger";
+ )'bes!2-"5\\_4" 'a ~ |
+ a a |
+ 'd cis-5 |
+ b1-2
+}
+
+four = \melodic{
+ \octave c;
+ d2-3 cis-4 |
+ \skip 4*16;
+ \stemup
+ b2-1 a-1 |
+ g a4. [gis16 a] |
+ gis2 <[g8 cis> <f-3 d-1]> e4-2 |
+ d4. [fis16-3 g-2] r16 b8.-1 ~ b4 |
+ \stemdown
+ d1-5
+}
+
+rh = \melodic{
+ \one
+ \multi 2 <
+ \one
+ \two
+ >
+ \bar "|.";
+}
+
+
+lh = \melodic{
+ \clef "bass";
+ \multi 2 <
+ \three
+ \four
+ >
+ \bar "|.";
+}
+
+
+global = \melodic{
+ \meter 4/4;
+ \key bes;
+}
+
+\score{
+ % Allegretto
+ % it would be nice to shut-off fingering...
+ \melodic \type Grandstaff <
+ \type Staff=treble <
+ \global
+% huh? try these iso directly!
+ \lh
+% \one
+% \two
+ >
+ \type Staff=bass <
+ \global
+ \rh
+% or try \two having here, iso above!
+% \three
+% \four
+ >
+ >
+ \paper{
+ \paper_twenty
+ linewidth= 195.\mm;
+ }
+ \midi{
+ \tempo 4 = 110;
+ }
+}
\piece{3}{preludes-3}{Semplice e non troppo legato}
\newpage
\piece{4}{preludes-4}{Allegretto}
+\newpage
+\piece{5}{preludes-5}{Moderato}
+\newpage
+\piece{6}{preludes-6}{Andante espressivo}
\end{document}
\header{
-filename = "standchen.ly";
-title = "St\"andchen (Serenade) \"Leise flehen meine Lieder\"";
-opus = "D. 957 No. 4";
-composer = "Franz Schubert (1797-1828)"
- "Text by Ludwig Rellstab (1799-1860)";
-enteredby = "JCN";
-copyright = "public domain";
+filename = "standchen.ly";
+title = "St\"andchen (Serenade)\\\``Leise flehen meine Lieder''";
+opus = "D. 957 No. 4";
+composer = "Franz Schubert (1797-1828)\\\ \hfill Text by Ludwig Rellstab (1799-1860)";
+enteredby = "JCN";
+copyright = "public domain";
}
%{