--- /dev/null
+=head1 NAME
+
+FAQ - LilyPond FAQs
+
+=head1 DESCRIPTION
+
+
+
+Q: I want to enter meterchanges inside the music.
+
+A: You can't; a meterchange is scorewide (well, staffwide in some
+modern music). If allowed inside the music, we get complicated and
+conflicting situations if two voices asked for (possibly different)
+meterchanges.
+
+You can mark certain spots, though: please check out F<cadenza.ly>
+
+
+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
+
+
--- /dev/null
+%
+% Cadenza to Mozart Horn/3
+%
+
+cad = music { $
+ \duration { 8}
+ \textstyle "italic"
+ 'c4._"f" g8
+ \textstyle "roman"
+ ['e^"accel" ()'d 'c b]
+ [b()'c] g-\fermata
+ \mark"br1"
+ c [c_"rubato" e g 'c]
+ \octave{'}
+ e4. e [g ()f_"rit" e d]
+
+ \duration{16}
+ dis4()e4
+ \mark"br2"
+ r8 [c d] [e f g gis]
+ \duration{4}
+ a-> `f()`e g
+ f-> `d()`cis e
+ \duration{8}
+ d4^\fermata
+ \mark"br3"
+
+ r8 `a [`b cis]
+ \duration{16} [d cis d e]
+ f4()[f e d c]
+ `b4
+ \octave{} \plet{2/3} ['d8 'c8 a8]
+ \plet{1/1}
+ g2
+ \mark "br4"
+ [g c e g] ['c e g 'c]\octave{'}
+ [e `g c e] g4^\fermata %()% BUG!
+ \mark "br5"
+ [g8.(_"a tempo" e g8. )e]
+ a4. g8 [f8 e8 d8 c8]
+ `g2 d2^"tr"
+ c4
+ $}
+
+ score {
+ staff { melodic
+ music { cad }
+ }
+ commands {
+ meter 4*4
+ cadenza 1
+ grouping 1
+ goto "br1"
+ bar "empty"
+ goto "br2"
+ bar "empty"
+ goto "br3"
+ bar "empty"
+ goto "br4"
+ bar "empty"
+ goto "br5"
+ bar "empty"
+ }
+}
*mlog << "\nProcessing music ... ";
assert (paper_p_);
-
- /// distribute commands to disciples
+ if (last() == Moment(0)) {
+ error("Need to have music in a score.");
+ }
+ // distribute commands to disciples
pscore_p_ = new PScore(paper_p_);
for (iter_top(staffs_,i); i.ok(); i++) {
i->truncate_cols(last());
// do this after processing, staffs first have to generate PCols.
find_col(last(), false)->set_breakable();
do_cols();
+ print();
calc_idealspacing();
// debugging
for (iter_top(cols_,c); c.ok(); ) {
if (!c->pcol_l_->used()) {
- c.del();
+ delete c.get();
} else {
c->preprocess();
c++;
this sux. We should have Score_column create the appropriate PCol.
Unfortunately, PCols don't know about their position.
*/
-// todo
PCursor<Score_column*>
Score::create_cols(Moment w)
{
paper_p_->outfile = s;
*mlog << "output to " << paper_p_->outfile << "...\n";
- Tex_stream the_output(paper_p_->outfile);
+
+ Tex_stream the_output(paper_p_->outfile);
+ the_output << "% outputting Score, defined at: " << define_spot_str_ << "\n";
pscore_p_->output(the_output);
}
staffs_.bottom().add(s);
}
+void
+Score::add_marks(Array<String> s_arr, Array<Moment> m_arr)
+{
+ for (int i=0; i < s_arr.size(); i++) {
+ String mark_str (s_arr[i]);
+ if (markers_assoc_.elt_query(mark_str) &&
+ m_arr[i] != markers_assoc_[mark_str])
+
+ error("Conflicting marker: `" + s_arr[i]+ "\'");
+ else
+ markers_assoc_[s_arr[i]] = m_arr[i];
+ }
+}