]> git.donarmstrong.com Git - lilypond.git/commitdiff
patch::: 1.3.37.jcn1
authorJan Nieuwenhuizen <janneke@gnu.org>
Tue, 21 Mar 2000 12:13:46 +0000 (13:13 +0100)
committerJan Nieuwenhuizen <janneke@gnu.org>
Tue, 21 Mar 2000 12:13:46 +0000 (13:13 +0100)
1.3.37.jcn1
===========

* Fixed performance of (de)crescendi.

* Better documentation for arithmetic_multiplier and arithmetic_basicspace
  in params.ly.

* Added instrument-equaliser for MIDI output, see scm/midi.scm, and
  properties midiMinimumVolume, midiMaximumVolume, ranges [0,1].

* Changed absolute midi volume settings into factor of full scale.

* Fixed another dynamic-line-spanner bug, it gets hairy.

* Added warning for spanners that are not fully contained in parent spanner.

25 files changed:
CHANGES
VERSION
input/test/coriolan-margin.ly
input/test/equaliser.ly [new file with mode: 0644]
lily/audio-item.cc
lily/dynamic-engraver.cc
lily/dynamic-performer.cc
lily/include/audio-item.hh
lily/include/axis-group-engraver.hh
lily/include/spanner.hh
lily/midi-item.cc
lily/span-dynamic-performer.cc
lily/spanner.cc
ly/engraver.ly
ly/params.ly
ly/performer.ly
mutopia/Coriolan/coriolan-midi.ly
mutopia/Coriolan/coriolan-paper.ly
mutopia/Coriolan/coriolan-part-paper.ly
mutopia/Coriolan/violino-1.ly
mutopia/Coriolan/violino-2.ly
mutopia/Coriolan/violoncello.ly
po/lilypond.pot
po/nl.po
scm/midi.scm

diff --git a/CHANGES b/CHANGES
index 4b4c02e51040532eec2bcb5f9252478964fc0b2d..48793fd84a6eee7261ce9f138e8eb348383f0b61 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,20 @@
+1.3.37.jcn1
+===========
+
+* Fixed performance of (de)crescendi.
+
+* Better documentation for arithmetic_multiplier and arithmetic_basicspace
+  in params.ly.
+
+* Added instrument-equaliser for MIDI output, see scm/midi.scm, and
+  properties midiMinimumVolume, midiMaximumVolume, ranges [0,1].
+
+* Changed absolute midi volume settings into factor of full scale.
+
+* Fixed another dynamic-line-spanner bug, it gets hairy.
+
+* Added warning for spanners that are not fully contained in parent spanner.
+
 
 1.3.36.hwn1
 ===========
diff --git a/VERSION b/VERSION
index b0b101c703fa4b4947655112e011c7e7241ada77..bda133cd29308704e4841b4b9611bc3e488e6297 100644 (file)
--- a/VERSION
+++ b/VERSION
@@ -2,7 +2,7 @@ PACKAGE_NAME=LilyPond
 MAJOR_VERSION=1
 MINOR_VERSION=3
 PATCH_LEVEL=37
-MY_PATCH_LEVEL=
+MY_PATCH_LEVEL=jcn1
 
 # use the above to send patches: MY_PATCH_LEVEL is always empty for a
 # released version.
index ed5103356dfd5f0e299eea94e00e02c2c0d08ba5..865543e8f1646f970ba318c536c5f63206496376 100644 (file)
@@ -1,6 +1,7 @@
 flauti = \notes \relative c' {
   \property Staff.instrument   = #"2 Flauti"
   \property Staff.instr                = #"Fl."
+  \time 4/4;
   c1 
   \break c
 %  \break c
@@ -121,12 +122,15 @@ violoncello = \notes \relative c' {
       \HaraKiriStaffContext
     }
     \translator {
-      \ScoreContext
+      \OrchestralScoreContext
+      timeSignatureStyle = #"C"
+      % 16 pt
       instrumentScriptPadding = #55  %% urg, this is in pt
       instrScriptPadding = #35
+      % 20pt
+      %instrumentScriptPadding = #60  %% urg, this is in pt
+      %instrScriptPadding = #40
       marginScriptHorizontalAlignment = #1
-      %marginScriptPadding = #15
-      %marginScriptHorizontalAlignment = #0
     }
   }
 }
diff --git a/input/test/equaliser.ly b/input/test/equaliser.ly
new file mode 100644 (file)
index 0000000..384ad66
--- /dev/null
@@ -0,0 +1,151 @@
+
+flauti = \notes \relative c' {
+  \property Staff.midiInstrument = #"flute"
+  \property Staff.instrument   = #"2 Flauti"
+  \property Staff.instr                = #"Fl."
+
+  c1 R1*10
+}
+
+oboi = \notes \relative c' {
+  \property Staff.midiInstrument = #"oboe"
+  \property Staff.instrument   = #"2 Oboi"
+  \property Staff.instr                = #"Ob."
+
+  R1*1 c1 R1*9
+}
+
+clarinetti = \notes \relative c' {
+  \property Staff.midiInstrument = #"clarinet"
+  \property Staff.instrument   = #"2 Clarinetti\n(B\\textflat)"
+  \property Staff.instr                = #"Cl.\n(B\\textflat)"
+
+  R1*2 c1 R1*8
+}
+
+fagotti = \notes \relative c' {
+  \property Staff.midiInstrument = #"bassoon"
+  \property Staff.instrument   = #"2 Fagotti"
+  \property Staff.instr                = #"Fg."
+
+  R1*3 c1 R1*7
+}
+
+corni = \notes \relative c' {
+  \property Staff.midiInstrument = #"french horn"
+  \property Staff.instrument   = #"2 Corni\n(E\\textflat)"
+  \property Staff.instr                = #"Cor.\n(E\\textflat)"
+
+  R1*4 c1 R1*6
+}
+
+trombe = \notes \relative c' {
+  \property Staff.midiInstrument = #"trumpet"
+  \property Staff.instrument   = #"2 Trombe\n(C)"
+  \property Staff.instr                = #"Tbe.\n(C)"
+
+  R1*5 c1 R1*5
+}
+
+timpani = \notes \relative c' {
+  \property Staff.midiInstrument = #"timpani"
+  \property Staff.instrument   = #"Timpani\n(C-G)"
+  \property Staff.instr                = #"Timp."
+
+  R1*6 c1 R1*4
+}
+
+violino1 = \notes \relative c' {
+  \property Staff.midiInstrument = #"violin"
+  \property Staff.instrument   = #"Violino I"
+  \property Staff.instr                = #"Vl. I"
+
+  R1*7 c1 R1*3
+}
+
+violino2 = \notes \relative c' {
+  \property Staff.midiInstrument = #"violin"
+  \property Staff.instrument   = #"Violino II"
+  \property Staff.instr                = #"Vl. II"
+  R1*8 c1 R1*2
+}
+
+viola = \notes \relative c' {
+  \property Staff.midiInstrument = #"viola"
+  \property Staff.instrument   = #"Viola"
+  \property Staff.instr                = #"Vla."
+
+  R1*9 c1 R1*1
+}
+
+violoncello = \notes \relative c' {
+  \property Staff.midiInstrument = #"cello"
+  %\property Staff.midiInstrument = #"contrabass"
+  \property Staff.instrument   = #"Violoncello\ne\nContrabasso"
+  \property Staff.instr                = #"Vc.\nCb."
+  
+  R1*10 c1
+}
+
+\include "paper16.ly"
+
+\score {
+  < 
+    \context StaffGroup ="legni" < 
+      \context Staff ="flauti" \flauti
+      \context Staff ="oboi" \oboi
+      \context Staff ="clarinetti" \clarinetti 
+      \context Staff ="fagotti" \fagotti 
+    >
+    \context StaffGroup ="ottoni" <
+      \context Staff ="corni" \corni
+      \context Staff ="trombe" \trombe
+    >
+    \context StaffGroup ="timpani" <
+      \context Staff ="timpani" \timpani
+     { 
+       \skip 1; 
+       % Hmm: this forces a staff-bracket, that's good!
+       % However, I can't find where is decided on staff-bracket yes/no
+     }
+    >
+    \context StaffGroup ="archi" <
+      \context GrandStaff ="violini" <
+        \context Staff ="violino1" \violino1
+        \context Staff ="violino2" \violino2
+      >
+      \context Staff ="viola" \viola
+      \context Staff ="violoncello" \violoncello
+    >
+  >
+ \header{
+               title = "Coriolan";
+               subtitle = "Ouverture"; 
+               opus = "Opus 62";
+               composer = "Ludwig van Beethoven (1770-1827)";
+               enteredby = "JCN";
+               copyright = "public domain";
+       }
+
+  \paper {
+       \paper_sixteen
+       indent=100.0\mm;
+       linewidth=150.0\mm;
+    \translator {
+      \HaraKiriStaffContext
+    }
+    \translator {
+      \ScoreContext
+      %instrumentScriptPadding = #55  %% urg, this is in pt
+      %instrScriptPadding = #35
+      marginScriptHorizontalAlignment = #1
+      %marginScriptPadding = #15
+      %marginScriptHorizontalAlignment = #0
+    }
+  }
+  \midi {
+       \tempo 1 = 60;
+  }
+}
+
index 60b15abb5c6a4b29865a4e35b734685df12d07c6..5d78ec4bd58794be869199bcbe49e7bc33cf4f13 100644 (file)
@@ -45,9 +45,9 @@ Audio_key::Audio_key (Key_def const& k)
   key_ = k;
 }
 
-Audio_dynamic::Audio_dynamic (int volume)
+Audio_dynamic::Audio_dynamic (Real volume)
 {
-  volume_i_ = volume;
+  volume_ = volume;
 }
 
 Audio_tempo::Audio_tempo (int per_minute_4_i)
index 8309597e50b7db19057b6f1151421ed1d93e89d7..7ca99417dd0cf0c46f2eb405dad0f227223696a2 100644 (file)
@@ -32,6 +32,8 @@
 
   * direction of text-dynamic-request if not equalt to direction
   of line-spanner
+
+  * FIXME: this has gotten a bit too hairy.
  */
 
 class Dynamic_line_spanner : public Spanner
@@ -87,7 +89,7 @@ class Dynamic_engraver : public Engraver
   Dynamic_line_spanner* finished_line_spanner_;
   Moment last_request_mom_;
 
-  Note_column* pending_column_;
+  Array<Note_column*> pending_column_arr_;
   Link_array<Score_element> pending_element_arr_;
   
   void  typeset_all ();
@@ -126,7 +128,6 @@ Dynamic_engraver::Dynamic_engraver ()
   finished_line_spanner_ = 0;
   span_start_req_l_ = 0;
   cresc_p_ =0;
-  pending_column_ = 0;
 
   text_req_l_ = 0;
   span_req_l_drul_[START] = 0;
@@ -139,12 +140,6 @@ Dynamic_engraver::do_post_move_processing ()
   text_req_l_ = 0;
   span_req_l_drul_[START] = 0;
   span_req_l_drul_[STOP] = 0;
-
-  /* ugr; we must attach the Dynamic_line_spanner to something
-     to be sure that the linebreaker will not be confused
-  */
-  // if (line_spanner_)
-  // line_spanner_->add_column (LEFT, get_staff_info ().command_pcol_l ());
 }
 
 bool
@@ -178,8 +173,9 @@ Dynamic_engraver::do_process_music ()
       && pending_element_arr_.size ())
     {
       line_spanner_ = new Dynamic_line_spanner;
-      assert (pending_column_);
-      line_spanner_->add_column (pending_column_);
+      for (int i = 0; i < pending_column_arr_.size (); i++)
+       line_spanner_->add_column (pending_column_arr_[i]);
+      pending_column_arr_.clear ();
       announce_element (Score_element_info
                        (line_spanner_,
                         text_req_l_ ? text_req_l_ : span_req_l_drul_[START]));
@@ -193,13 +189,22 @@ Dynamic_engraver::do_process_music ()
       pending_element_arr_.clear ();
     }
 
+  /*
+    TODO: This should be optionised:
+      * break when group of dynamic requests ends
+      * break now  (only if no cresc. in progress)
+      * continue through piece */
   if (span_req_l_drul_[START] || span_req_l_drul_[STOP] || text_req_l_)
-    last_request_mom_ = now_mom ();
+    {
+      last_request_mom_ = now_mom ();
+    }
   else
     {
-
-#if 0
       /*
+       During a (de)crescendo, pending request will not be cleared,
+       and a line-spanner will always be created, as \< \! are already
+       two requests.
+
        Maybe always creating a line-spanner for a (de)crescendo (see
        below) is not a good idea:
 
@@ -212,15 +217,7 @@ Dynamic_engraver::do_process_music ()
        Urg, but line-spanner must always have at least same duration
        as (de)crecsendo, b.o. line-breaking.
        */
-      if (now_mom () > last_request_mom_)
-#else
-      /*
-       During a (de)crescendo, pending request will not be cleared,
-       and a line-spanner will always be created, as \< \! are already
-       two requests.
-       */
       if (now_mom () > last_request_mom_ && !span_start_req_l_)
-#endif 
        {
          for (int i = 0; i < pending_element_arr_.size (); i++)
            {
@@ -250,8 +247,14 @@ Dynamic_engraver::do_process_music ()
                e->set_elt_property ("minimum-space", s);
            }
          pending_element_arr_.clear ();
-         finished_line_spanner_ = line_spanner_;
-         line_spanner_ = 0;
+         if (line_spanner_)
+           {
+             for (int i = 0; i < pending_column_arr_.size (); i++)
+               line_spanner_->add_column (pending_column_arr_[i]);
+             pending_column_arr_.clear ();
+             finished_line_spanner_ = line_spanner_;
+             line_spanner_ = 0;
+           }
        }
     } 
 
@@ -284,7 +287,7 @@ Dynamic_engraver::do_process_music ()
       else
        {
          assert (!finished_cresc_p_);
-         cresc_p_->set_bound(RIGHT, get_staff_info ().musical_pcol_l ());
+         cresc_p_->set_bound (RIGHT, get_staff_info ().musical_pcol_l ());
          finished_cresc_p_ = cresc_p_;
          cresc_p_ = 0;
          span_start_req_l_ = 0;
@@ -326,7 +329,7 @@ Dynamic_engraver::do_process_music ()
                                            + "Spanner", SCM_UNDEFINED);
            }
 
-         cresc_p_->set_bound(LEFT, get_staff_info ().musical_pcol_l ());
+         cresc_p_->set_bound (LEFT, get_staff_info ().musical_pcol_l ());
 
 
          /* 
@@ -400,13 +403,6 @@ Dynamic_engraver::typeset_all ()
       typeset_element (text_p_);
       text_p_ = 0;
     }
-
-  /*
-    TODO: This should be optionised:
-      * break when group of dynamic requests ends
-      * break now 
-      * continue through piece */
-  //  if (line_spanner_ && last_request_mom_ < now_mom ())
   if (finished_line_spanner_)
     {
       side_position (finished_line_spanner_).add_staff_support ();
@@ -427,7 +423,7 @@ Dynamic_engraver::acknowledge_element (Score_element_info i)
        }
       else
        {
-         pending_column_ = n;
+         pending_column_arr_.push (n);
        }
     }
 }
index 7fbca0dd698718d599a2dca4e009e224a2ed94bf..e6daf5e31016acb4bfa04897ecdbdace9fc76869 100644 (file)
@@ -71,10 +71,49 @@ Dynamic_performer::do_process_music ()
         (ly_symbol2scm ("dynamic-absolute-volume"),
          ly_quote_scm (ly_str02scm (text_script_req_l_->text_str_.ch_C ())),
          SCM_UNDEFINED));
-      int volume = gh_scm2int (ly_eval_str ("dynamic-default-volume"));
+      Real volume = gh_scm2double (ly_eval_str ("dynamic-default-volume"));
       if (gh_number_p (s))
-       volume = gh_scm2int (s);
-
+       volume = gh_scm2double (s);
+      
+      /*
+       properties override default equaliser setting
+       */
+      SCM min = get_property ("midiMinimumVolume");
+      SCM max = get_property ("midiMaximumVolume");
+      if (gh_number_p (min) || gh_number_p (max))
+       {
+         Interval iv (0, 1);
+         if (gh_number_p (min))
+           iv[MIN] = gh_scm2double (min);
+         if (gh_number_p (max))
+           iv[MAX] = gh_scm2double (max);
+         volume = iv[MIN] + iv.length () * volume;
+       }
+      else
+       {
+         /*
+           urg, code duplication:: staff_performer
+         */
+         s = get_property ("midiInstrument");
+         
+         if (!gh_string_p(s))
+           s = get_property ("instrument");
+         
+         if (!gh_string_p(s))
+           s = ly_str02scm ("piano");
+         
+         
+         s = scm_eval (gh_list (ly_symbol2scm ("instrument-equaliser"),
+                                s, SCM_UNDEFINED));
+         if (gh_pair_p (s))
+           {
+             Interval iv;
+             iv[MIN] = gh_scm2double (gh_car (s));
+             iv[MAX] = gh_scm2double (gh_cdr (s));
+             volume = iv[MIN] + iv.length () * volume;
+           }
+       }
+      
       audio_p_ = new Audio_dynamic (volume);
       Audio_element_info info (audio_p_, text_script_req_l_);
       announce_element (info);
index fd465f9f4cb286e7b177483909fa6a0d1e7ec7a4..9b59283804b7aadf1f175db801a36b611b265f90 100644 (file)
@@ -40,9 +40,9 @@ private:
 class Audio_dynamic : public Audio_item
 {
 public:
-  Audio_dynamic (int volume);
+  Audio_dynamic (Real volume);
 
-  int volume_i_;
+  Real volume_;
 };
 
 class Audio_key : public Audio_item
index f790997d85104d7a2eb1bc134cfeab0a15f77f18..23d8793a212659e28a2f2142496fc03a2a6f1fcb 100644 (file)
@@ -14,7 +14,8 @@
 #include "engraver.hh"
 
 /**
-   Put stuff in a Axis_group_spanner.  Use as last element of a context. 
+   Put stuff in a Spanner with an Axis_group_interface.
+   Use as last element of a context. 
  */
 class Axis_group_engraver : public Engraver
 {
index b67d63d7dc134b199deed55443b5a340438a9e5a..f7c058b7017625364925c6181d02bfa809037312 100644 (file)
@@ -12,8 +12,6 @@
 #include "drul-array.hh"
 #include "rod.hh"
 
-
-class Axis_group_spanner;
 /** A symbol which is attached between two columns. A spanner is a
   symbol which spans across several columns, so its final appearance
   can only be calculated after the breaking problem is solved.
@@ -32,10 +30,14 @@ class Axis_group_spanner;
 
   */
 class Spanner : public  Score_element {
+  // SCMify me
   Drul_array<Item*> spanned_drul_;
 
 public:
+  // SCMify me
   Link_array<Spanner> broken_into_l_arr_;
+
+  Interval_t<int> spanned_rank_iv ();
   void set_bound (Direction d, Item*);
   Item *get_bound (Direction d) const;
   
index b822a6655e51eb3fe97f2f242aee6596036945fb..a5921325e248607c02cadc7192891f4654467412 100644 (file)
@@ -476,8 +476,16 @@ Midi_dynamic::str () const
     07 MSB
     27 LSB
    */
+  static Real const full_scale = 127;
+  
+  int volume = (int)(audio_l_->volume_*full_scale);
+  if (volume <= 0)
+    volume = 1;
+  if (volume > full_scale)
+    volume = (int)full_scale;
+
   str += to_str ((char)0x07);
-  str += to_str ((char)audio_l_->volume_i_);
+  str += to_str ((char)volume);
   return str;
 }
 
index b4807e3a9d9324f2cb8397b02f492af7376437eb..deef286259911938e44798f5e843862177a0a37c 100644 (file)
@@ -28,14 +28,16 @@ public:
   Span_dynamic_performer ();
 
 protected:
-  virtual bool do_try_music (Music* req_l);
+  virtual bool do_try_music (Music*);
   virtual void acknowledge_element (Audio_element_info);
+  virtual void process_acknowledged ();
   virtual void do_process_music ();
   virtual void do_pre_move_processing ();
   virtual void do_post_move_processing ();
 
 private:
   Audio_dynamic* audio_p_;
+  Real last_volume_;
   Span_req* span_start_req_l_;
   Drul_array<Span_req*> span_req_l_drul_;
   Array<Audio_dynamic_tuple> dynamic_tuple_arr_;
@@ -52,6 +54,7 @@ Span_dynamic_performer::Span_dynamic_performer ()
   span_req_l_drul_[STOP] = 0;
   span_start_req_l_ = 0;
   audio_p_ = 0;
+  last_volume_ = 0;
 }
 
 void
@@ -59,23 +62,72 @@ Span_dynamic_performer::acknowledge_element (Audio_element_info i)
 {
   if (Audio_dynamic * d = dynamic_cast <Audio_dynamic*> (i.elem_l_))
     {
-      Audio_dynamic_tuple a = { d, now_mom () };
-      if (!span_req_l_drul_[START])
-       dynamic_tuple_arr_.clear ();
-      dynamic_tuple_arr_.push (a);
-      if (finished_dynamic_tuple_arr_.size ())
-       finished_dynamic_tuple_arr_.push (a);
+      last_volume_ = d->volume_;
     }
 }
 
 void
 Span_dynamic_performer::do_process_music ()
 {
-  if (finished_dynamic_tuple_arr_.size () > 1
-     && finished_dynamic_tuple_arr_.top ().audio_l_->volume_i_)
+  if (span_start_req_l_ || span_req_l_drul_[START])
+    {
+      audio_p_ = new Audio_dynamic (0);
+      Audio_element_info info (audio_p_, span_req_l_drul_[START]
+                              ? span_req_l_drul_[START]
+                              : span_req_l_drul_[STOP]);
+      announce_element (info);
+      Audio_dynamic_tuple a = { audio_p_, now_mom () };
+      dynamic_tuple_arr_.push (a);
+    }
+  
+  if (span_req_l_drul_[STOP])
+    {
+      if (!span_start_req_l_)
+       {
+         span_req_l_drul_[STOP]->warning (_ ("can't find start of (de)crescendo"));
+       }
+      else
+       {
+         finished_dir_ = dir_;
+         finished_dynamic_tuple_arr_ = dynamic_tuple_arr_;
+       }
+      dynamic_tuple_arr_.clear ();
+      span_start_req_l_ = 0;
+    }
+
+  if (span_req_l_drul_[START])
+    {
+      dir_ = span_req_l_drul_[START]->span_type_str_ == "crescendo"
+       ? RIGHT : LEFT;
+      span_start_req_l_ = span_req_l_drul_[START];
+      
+      dynamic_tuple_arr_.clear ();
+      Audio_dynamic_tuple a = { audio_p_, now_mom () };
+      dynamic_tuple_arr_.push (a);
+    }
+}
+
+void
+Span_dynamic_performer::process_acknowledged ()
+{
+  if (span_req_l_drul_[STOP])
+   { 
+     finished_dynamic_tuple_arr_.top ().audio_l_->volume_ = last_volume_;
+   }
+
+  if (span_req_l_drul_[START])
+    {
+     dynamic_tuple_arr_[0].audio_l_->volume_ = last_volume_;
+    }
+}
+  
+void
+Span_dynamic_performer::do_pre_move_processing ()
+{
+  if (finished_dynamic_tuple_arr_.size () > 1)
     {
-      Real start_volume = finished_dynamic_tuple_arr_[0].audio_l_->volume_i_;
-      Real dv = finished_dynamic_tuple_arr_.top ().audio_l_->volume_i_
+      Real start_volume = finished_dynamic_tuple_arr_[0].audio_l_->volume_;
+      Real dv = finished_dynamic_tuple_arr_.top ().audio_l_->volume_
        - start_volume;
       /*
        urg.
@@ -90,11 +142,11 @@ Span_dynamic_performer::do_process_music ()
        */
       if (!dv || sign (dv) != finished_dir_)
        {
-         // urg.  about one volume step
-         dv = (int)finished_dir_ * 13;
+         // urg.  20%: about two volume steps
+         dv = (Real)finished_dir_ * 0.2;
          if (!start_volume)
            start_volume = finished_dynamic_tuple_arr_.top
-             ().audio_l_->volume_i_ - dv;
+             ().audio_l_->volume_ - dv;
        }
       Moment start_mom = finished_dynamic_tuple_arr_[0].mom_;
       Moment dt = finished_dynamic_tuple_arr_.top ().mom_ - start_mom;
@@ -103,45 +155,11 @@ Span_dynamic_performer::do_process_music ()
          Audio_dynamic_tuple* a = &finished_dynamic_tuple_arr_[i];
          Real volume = start_volume + dv * (Real)(a->mom_ - start_mom)
            / (Real)dt;
-         a->audio_l_->volume_i_ = (int)volume;
+         a->audio_l_->volume_ = volume;
        }
       finished_dynamic_tuple_arr_.clear ();
     }
 
-  if (span_req_l_drul_[STOP])
-    {
-      finished_dir_ = dir_;
-      if (!span_start_req_l_)
-       {
-         span_req_l_drul_[STOP]->warning (_ ("can't find start of (de)crescendo"));
-       }
-      else
-       {
-         span_start_req_l_ = 0;
-         finished_dynamic_tuple_arr_ = dynamic_tuple_arr_;
-         dynamic_tuple_arr_.clear ();
-         if (finished_dynamic_tuple_arr_.size ())
-           dynamic_tuple_arr_.push (finished_dynamic_tuple_arr_.top ());
-       }
-    }
-
-  if (span_req_l_drul_[START])
-    {
-      dir_ = span_req_l_drul_[START]->span_type_str_ == "crescendo"
-       ? RIGHT : LEFT;
-      span_start_req_l_ = span_req_l_drul_[START];
-      audio_p_ = new Audio_dynamic (0);
-      Audio_element_info info (audio_p_, 0);
-      announce_element (info);
-
-      Audio_dynamic_tuple a = { audio_p_, now_mom () };
-      dynamic_tuple_arr_.push (a);
-    }
-}
-
-void
-Span_dynamic_performer::do_pre_move_processing ()
-{
   if (audio_p_)
     {
       play_element (audio_p_);
index 222a39149674456a2206d50d42e0da2ab62ae59a..7b6a4d0f08418474370625103a7180fa8442ec57 100644 (file)
 #include "line-of-score.hh"
 #include "break-align-item.hh"
 
+
 void
-Spanner::do_break_processing()
+Spanner::do_break_processing ()
 {
   //break_into_pieces
+  Item * left = spanned_drul_[LEFT];
+  Item * right = spanned_drul_[RIGHT];
+  
+  if  (left == right)
+    {
+      warning (_f ("Spanner `%s' has equal left and right spanpoints",
+                  classname (this)));
+    }
+
+  /*
+    Check if our parent in X-direction spans equally wide
+    or wider than we do.
+   */
+  for (int a = X_AXIS; a < NO_AXES; a ++)
+    {
+      if (Spanner* parent = dynamic_cast<Spanner*> (parent_l ((Axis)a)))
+       {
+         if (!parent->spanned_rank_iv ().contains_b (this->spanned_rank_iv ()))
+           {
+             programming_error (to_str ("Spanner `%s' is not fully contained in parent spanner `%s'.",
+                                        classname (this),
+                                        classname (parent)));
+           }
+       }
+    }
   
   if (line_l () || broken_b ())
     return;
-  
-  Item * left = spanned_drul_[LEFT];
-  Item * right = spanned_drul_[RIGHT];
 
   if  (left == right)
     {
-      warning (_ ("Left spanpoint is right spanpoint"));
-
       /*
        FIXME: this is broken.
        */
@@ -99,6 +120,21 @@ Spanner::set_my_columns()
   while (flip(&i) != LEFT);
 }       
 
+Interval_t<int>
+Spanner::spanned_rank_iv ()
+{
+  Interval_t<int> iv (0, 0);
+
+  if (spanned_drul_[LEFT])
+    {
+      iv[LEFT] = spanned_drul_[LEFT]->column_l ()->rank_i ();
+    }
+  if ( spanned_drul_[RIGHT])
+    {
+      iv[RIGHT] = spanned_drul_[RIGHT]->column_l ()->rank_i ();
+    }
+  return iv;
+}
 
 Item*
 Spanner::get_bound (Direction d) const
@@ -125,7 +161,8 @@ Spanner::set_bound(Direction d, Item*i)
   
   if (spanned_drul_[Direction(-d)] == spanned_drul_[d]
        && i)
-    warning (_f ("Spanner `%s' has equal left and right spanpoints", classname (this)));
+    warning (_f ("Spanner `%s' has equal left and right spanpoints",
+                classname (this)));
 }
 
 
index c8f6b73bdbd52b7ee1d2146a386777471babbeba..4d867868af2193a6c93f3d243a87559578a02869 100644 (file)
@@ -118,8 +118,8 @@ VoiceContext = \translator {
        \type "Engraver_group_engraver";
        \name Voice;
 
-       dynamicPadding = #5  % urg, in \pt
-       dynamicMinimumSpace = #10  % urg, in \pt
+       dynamicPadding = #3  % urg, in \pt
+       dynamicMinimumSpace = #6  % urg, in \pt
 
        Generic_property_list = #generic-voice-properties
        \consists "Output_property_engraver";   
index c57a1120d5e6bcb4df9bfd061f9c9eb20a7276e0..a0f86cdf287bcc59218adfb788fb950501c522c2 100644 (file)
@@ -27,16 +27,45 @@ interbeam4 = (3.0 * \staffspace - \beam_thickness) / 3.0;
 %{
 The space taken by a note is determined by the formula 
 
-arithmetic_multiplier * ( c + log2 (time) ))
+   SPACE = arithmetic_multiplier * ( C + log2 (TIME) ))
+
+where TIME is the amount of time a note occupies.  The value of C is
+chosen such that the smallest space within a measure is
+arithmetic_basicspace:
+
+  C = arithmetic_basicspace - log2 (mininum (SHORTEST, 1/8)) 
+
+The smallest space is the one following the shortest note in the
+measure, or the space following a hypothetical 1/8 note.  Typically
+arithmetic_basicspace is set to a value so that the shortest note
+takes about two noteheads of space (ie, is followed by a notehead of
+space):
+
+   2*quartwidth = arithmetic_multiplier * ( C + log2 (SHORTEST) ))
+
+   { using: C = arithmetic_basicspace - log2 (mininum (SHORTEST, 1/8)) }
+   { assuming: SHORTEST <= 1/8 }
+
+               = arithmetic_multiplier *
+              ( arithmetic_basicspace - log2 (SHORTEST) + log2 (SHORTEST) )
+
+               = arithmetic_multiplier * arithmetic_basicspace
+
+   { choose: arithmetic_multiplier = 0.9*quartwidth (why?)}
+
+               = 0.9*quartwidth * arithmetic_basicspace
+
+   =>         
+
+   arithmetic_basicspace = 2/0.9 = 2.2
+
+If you want to space your music wider, use something like:
+
+   arithmetic_basicspace = 4.;
 
-where code(time) is the amount of time a note occupies.  The value
-of code(c) is chosen such that the smallest space within a measure is
-arithmetic_basicspace.  The smallest space is the one following the
-shortest note in the measure.  Typically arithmetic_basicspace is set
-to the width of a quarter note head.
 %}
-arithmetic_basicspace = 2.;
 arithmetic_multiplier = 0.9 * \quartwidth ;
+arithmetic_basicspace = 2.2;
 
 
 #'Stem_tremolo::beam-width = 1.5 * \quartwidth ; 
index 37ba5b1252f72005aeddf3b84c9bdaeb0518e8a7..ff373d52197ac71af5d68ab31cd49f5a28b0d949 100644 (file)
@@ -18,26 +18,6 @@ StaffContext = \translator {
 };
 \translator { \StaffContext }
 
-%% urg, why (needs praeludium-*.ly) these?
-\translator
-{
-       \type "Performer_group_performer";
-       \consists "Note_performer";
-        \name VoiceFour;
-}
-
-\translator
-{
-       \type "Performer_group_performer";
-       \consists "Note_performer";
-       \name VoiceThree;
-}
-\translator {
-       \type "Performer_group_performer";
-       \consists "Note_performer";
-        \name VoiceOne;
-}
-
 VoiceContext = \translator {
        \type "Performer_group_performer";
        \name Voice;
index a7086cbe80816a997fed854ca89b646a01c459b2..ba81ffaf754acc44d86ebbbddab3c180f14f9f1c 100644 (file)
@@ -1,3 +1,18 @@
 \midi{ 
        \tempo 4 = 150; 
+       \translator {
+               \VoiceContext
+               \name "VoiceOne";
+       }
+       \translator {
+               \VoiceContext
+               \name "VoiceTwo";
+               %\remove "Span_dynamic_engraver";
+               %\remove "Dynamic_engraver";
+       }
+       \translator {
+               \StaffContext
+               \accepts "VoiceOne";
+               \accepts "VoiceTwo";
+       }
 }
index 2b3b88b76d445dc32611b1363ab4ed5066233b35..0c87cdff7d2dd06fdff060aea532254b9dba0fb0 100644 (file)
@@ -8,13 +8,16 @@
 
        \translator {
                \VoiceContext
-               dynamicPadding = #3  % urg, in \pt
+               dynamicPadding = #2  % urg, in \pt
                dynamicMinimumSpace = #6  % urg, in \pt
        }
        \translator {
                \VoiceContext
                \name "VoiceOne";
 
+               dynamicPadding = #2  % urg, in \pt
+               dynamicMinimumSpace = #6  % urg, in \pt
+
                %%\consists "Line_number_engraver";
                verticalDirection = #1
                stemVerticalDirection = #1
        }
        \translator { 
                \HaraKiriStaffContext 
-               instrumentScriptPadding = #55  %% urg, this is in pt
-               instrScriptPadding = #35 %% urg, this is in pt
-               maximumRestCount = #1
                \accepts "VoiceOne";
                \accepts "VoiceTwo";
        }
        \translator { 
-               \ScoreContext 
-               %textEmptyDimension = ##t
-               textStyle = #"italic"
+               \OrchestralScoreContext 
+               %% URG: this changes dynamics too
+               %%textStyle = #"italic"
                timeSignatureStyle = #"C"
+               instrumentScriptPadding = #55  %% urg, this is in pt
+               instrScriptPadding = #35 %% urg, this is in pt
+               marginScriptHorizontalAlignment = #1
+               maximumRestCount = #1
        }
-       \translator { \OrchestralScoreContext }
 }
index 7ec5642f26dfbb7f580dfb3f9d38115731a75779..b9ed1f401d882b4bf088c08934d97b19384df8fa 100644 (file)
@@ -7,8 +7,8 @@
 
        \translator {
                \VoiceContext
-               dynamicPadding = #3  % urg, in \pt
-               dynamicMinimumSpace = #6  % urg, in \pt
+               %dynamicPadding = #5  % urg, in \pt
+               %dynamicMinimumSpace = #10  % urg, in \pt
        }
        \translator {
                \VoiceContext
                %% Aargh: absulute dynamics:
                \remove "Text_engraver";
        }
-       % Hmm
-       \translator {
-               \StaffContext
-               \accepts "VoiceOne";
-               \accepts "VoiceTwo";
-               instrumentScriptPadding = #55  %% urg, this is in pt
-               instrScriptPadding = #35  %% urg, this is in pt
-               maximumRestCount = #1
-       }
        \translator { 
                \OrchestralPartStaffContext 
                \accepts "VoiceOne";
                \accepts "VoiceTwo";
-               instrumentScriptPadding = #55  %% urg, this is in pt
-               instrScriptPadding = #35  %% urg, this is in pt
-               maximumRestCount = #1
        }
        \translator { 
                \ScoreContext skipBars = ##t 
-               %textEmptyDimension = ##t
-               textStyle = #"italic"
+               %% URG: this changes dynamics too
+               %%textStyle = #"italic"
                timeSignatureStyle = #"C"
+               instrumentScriptPadding = #60  %% urg, this is in pt
+               instrScriptPadding = #40 %% urg, this is in pt
+               marginScriptHorizontalAlignment = #1
+               maximumRestCount = #1
        }
 }
index f9cd07a6d3a9316a876415cda7ebdecf3b7d1a3d..a08871954818c779c588d702787081f44bdbfa68 100644 (file)
@@ -75,8 +75,8 @@ violino1 = \notes \relative c {
        )f2. ges4\sf(|
        %50
        )f1\>~ |
-       f4 d( bes)\!as |
-       g2.\p( as4 |
+       f4 d( bes)as |
+       \!g2.\p( as4 |
        g f d ) bes |
        bes'2.( c4 |
        
@@ -112,9 +112,9 @@ violino1 = \notes \relative c {
        \property Voice.crescendoSpanner = "dashed-line"
        bes2.\p\<( c4 |
        bes a fis ) d |
-       \!d'\sf\>( as g )\!f |
+       \!d'\sf\>( as g )f |
        %75
-       r8[es\p(c)es]r[d(bes)d] |
+       \!r8[es\p(c)es]r[d(bes)d] |
        r[c(g)c]r[bes(g)bes] |
        r[a(g)a]r[bes(g)bes]|
        [fis-.\pp a-.] a4. a8-. a4~|
@@ -260,8 +260,8 @@ violino1 = \notes \relative c {
        %175
        )d2. es4\sf(|
        )d1\> ~ |
-       d4( b g \!)f
-       e2.\p( f4 |
+       d4( b g )f
+       \!e2.\p( f4 |
        e d b ) g |
        %180
        g'2.( a4 |
@@ -295,9 +295,9 @@ violino1 = \notes \relative c {
        g\< fis dis ) b |
        %200
        b'1 ~ |
-       \!
-       [c8\f\>c,(g)c]r[c(bes)\!c] |
-       r[c\p(as)c]r[c(g)c] |
+       b 
+       [\!c8\f\>c,(g)c]r[c(bes)c] |
+       r[\!c\p(as)c]r[c(g)c] |
        r[c(f,)c']r[c(g)c] |
        %205
        r[c(as)c]r[c(a)c] |
index 41ef2e4a8a12959614b9d36b0998c54b710e618f..e2243cf4275aed581a5b92000651c037e106dfab 100644 (file)
@@ -75,7 +75,7 @@ violino2 = \notes \relative c {
        R1*5 |
        \property Voice.crescendoText = "cresc."
        \property Voice.crescendoSpanner = "dashed-line"
-       g'2.\p\<( a4 |
+       g'2.\p\<( as4 |
        g f d ) bes |
        bes'2.( c4 |
        bes2 )as |
@@ -105,10 +105,10 @@ violino2 = \notes \relative c {
        \property Voice.crescendoSpanner = "dashed-line"
        bes2.\p\<( c4 |
        bes a fis ) d |
-       \!d'\sf\>( as g )\!f |
+       \!d'\sf\>( as g )f |
        %75
        % nono, only looks like transpose
-       r8[c'\p(g)c]r[bes(g)bes] |
+       r8[\!c'\p(g)c]r[bes(g)bes] |
        r[g(es)g]r[g(d)g] |
        r[g(es)g]r[g(e)g]|r8 fis-.\pp fis4. fis8-. fis4~|
        % urg, can't copy: \transpose g \violino-1(75,91)
@@ -266,8 +266,8 @@ violino2 = \notes \relative c {
        r4 [fis8-.as-.][as()g] es'4\sf(|
        % copied violino-1(176,201)
        )d1\> ~ |
-       d4( b g \!)f
-       e2.\p( f4 |
+       d4( b g )f
+       \!e2.\p( f4 |
        e d b ) g |
 
        %180
@@ -304,10 +304,10 @@ violino2 = \notes \relative c {
 
        %200
        b'1 ~ |
-       \!
+       b 
        % similar violino-1 only until 219
-       [c8\f\>g(c)g]r[bes(g)\!bes] |
-       r[as\p(f)as]r[g(es)g] |
+       [\!c8\f\>g(c)g]r[bes(g)bes] |
+       r[\!as\p(f)as]r[g(es)g] |
        r[f(c)f]r[g(es)g] |
 
        %205
index 578ceb41d155c294c508f9a6f296e9e9fe93e53e..7609b49090eda77d19b97921ea10f1ec3ba6c996 100644 (file)
@@ -113,10 +113,10 @@ violoncello = \notes \relative c {
        \property Voice.crescendoSpanner = "dashed-line"
        [g8\p\<(bes' g bes][d bes g)d~] |
        [d8(a' fis a][d a fis)d] |
-       [\!f!8\sf\>(as f as][f g d)\!g] |
+       [\!f!8\sf\>(as f as][f g d)g] |
 
        %75
-       c,4\p r d r |
+       \!c,4\p r d r |
        es r d r |
        c r cis r |
        d\pp r8 d d4. d8 |
@@ -316,8 +316,8 @@ violoncello = \notes \relative c {
        %200
        [b8\<( fis' dis fis ][b fis dis )b!~] |
        [b8\p( g' e g][e g e )g] |
-       [f(g f g][f g f)\!g] |
-       es!4\fp r e r |
+       [f(g f g][f g f)g] |
+       \!es!4\fp r e r |
        f r g r |
        
        %205
index 10301acea2cf09c4be619a31c60d6f4b132a2ace..bfac9791681c3de71dbb29353b1e31fcf3eeeb20 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2000-03-15 19:34+0100\n"
+"POT-Creation-Date: 2000-03-21 11:40+0100\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -207,7 +207,7 @@ msgstr ""
 msgid "unknown clef type"
 msgstr ""
 
-#: collision.cc:99
+#: collision.cc:102
 msgid "Too many clashing notecolumns.  Ignoring them."
 msgstr ""
 
@@ -219,7 +219,7 @@ msgstr ""
 msgid "too small"
 msgstr ""
 
-#: cross-staff.cc:18
+#: cross-staff.cc:19
 msgid ""
 "minVerticalAlign != maxVerticalAlign: cross staff spanners may be broken"
 msgstr ""
@@ -236,19 +236,19 @@ msgstr ""
 msgid "NaN"
 msgstr ""
 
-#: dynamic-engraver.cc:244 span-dynamic-performer.cc:114
+#: dynamic-engraver.cc:285 span-dynamic-performer.cc:87
 msgid "can't find start of (de)crescendo"
 msgstr ""
 
-#: dynamic-engraver.cc:263
+#: dynamic-engraver.cc:304
 msgid "already have a crescendo"
 msgstr ""
 
-#: dynamic-engraver.cc:264
+#: dynamic-engraver.cc:305
 msgid "already have a decrescendo"
 msgstr ""
 
-#: dynamic-engraver.cc:339
+#: dynamic-engraver.cc:380
 msgid "unterminated (de)crescendo"
 msgstr ""
 
@@ -272,7 +272,7 @@ msgstr ""
 msgid "no Grace context available"
 msgstr ""
 
-#: grace-position-engraver.cc:91
+#: grace-position-engraver.cc:93
 msgid "Unattached grace notes.  Attaching to last musical column."
 msgstr ""
 
@@ -545,20 +545,20 @@ msgstr ""
 msgid "Braces don't match"
 msgstr ""
 
-#: paper-column.cc:48
+#: paper-column.cc:49
 msgid "Must set spring between differing columns"
 msgstr ""
 
-#: paper-def.cc:69
+#: paper-def.cc:70
 #, c-format
 msgid "unknown paper variable: `%s'"
 msgstr ""
 
-#: paper-def.cc:73
+#: paper-def.cc:74
 msgid "not a real variable"
 msgstr ""
 
-#: paper-def.cc:180
+#: paper-def.cc:184
 #, c-format
 msgid "paper output to %s..."
 msgstr ""
@@ -633,7 +633,7 @@ msgstr ""
 msgid "too many notes for rest collision"
 msgstr ""
 
-#: score-engraver.cc:139
+#: score-engraver.cc:141
 #, c-format
 msgid "unbound spanner `%s'"
 msgstr ""
@@ -704,11 +704,7 @@ msgstr ""
 msgid "Slur over rest?"
 msgstr ""
 
-#: spanner.cc:34
-msgid "Left spanpoint is right spanpoint"
-msgstr ""
-
-#: spanner.cc:128
+#: spanner.cc:31 spanner.cc:164
 #, c-format
 msgid "Spanner `%s' has equal left and right spanpoints"
 msgstr ""
index 56a2d4a94437472d1d56973fd54c0c980ccf266e..2964fd72dd41ae924f2fd84b98080e9528e29b15 100644 (file)
--- a/po/nl.po
+++ b/po/nl.po
@@ -4,7 +4,7 @@
 #
 msgid ""
 msgstr ""
-"POT-Creation-Date: 2000-03-15 19:34+0100\n"
+"POT-Creation-Date: 2000-03-21 11:40+0100\n"
 "Content-Type: text/plain; charset=\n"
 "Date: 1998-05-26 11:26:28+0200\n"
 "From:  <janneke@gnu.org>\n"
@@ -205,7 +205,7 @@ msgstr "ongeldige inversie toon: geen onderdeel van accoord: %s"
 msgid "unknown clef type"
 msgstr "onbekend type sleutel"
 
-#: collision.cc:99
+#: collision.cc:102
 msgid "Too many clashing notecolumns.  Ignoring them."
 msgstr "Te veel botsende nootkolommen.  Negeer ze."
 
@@ -217,7 +217,7 @@ msgstr "crescendo"
 msgid "too small"
 msgstr "te klein"
 
-#: cross-staff.cc:18
+#: cross-staff.cc:19
 msgid ""
 "minVerticalAlign != maxVerticalAlign: cross staff spanners may be broken"
 msgstr ""
@@ -236,19 +236,19 @@ msgstr "kan geheugen controle niet zetten!"
 msgid "NaN"
 msgstr "NaN"
 
-#: dynamic-engraver.cc:244 span-dynamic-performer.cc:114
+#: dynamic-engraver.cc:285 span-dynamic-performer.cc:87
 msgid "can't find start of (de)crescendo"
 msgstr "kan start van (de)crescendo niet vinden"
 
-#: dynamic-engraver.cc:263
+#: dynamic-engraver.cc:304
 msgid "already have a crescendo"
 msgstr "heb al een crescendo"
 
-#: dynamic-engraver.cc:264
+#: dynamic-engraver.cc:305
 msgid "already have a decrescendo"
 msgstr "heb al een decrescendo"
 
-#: dynamic-engraver.cc:339
+#: dynamic-engraver.cc:380
 msgid "unterminated (de)crescendo"
 msgstr "onbeëindigd (de)crescendo"
 
@@ -273,7 +273,7 @@ msgstr "Geen doenbare regelafbreuk gevonden"
 msgid "no Grace context available"
 msgstr "geen Grace context voor handen"
 
-#: grace-position-engraver.cc:91
+#: grace-position-engraver.cc:93
 msgid "Unattached grace notes.  Attaching to last musical column."
 msgstr "Losse grace noten.  Maak ze vast aan vorige muziekale kolom."
 
@@ -335,6 +335,7 @@ msgstr "vals:"
 
 #: local-key-engraver.cc:83 time-signature-engraver.cc:29
 #: translator-group.cc:416 translator-group.cc:425
+#, c-format
 msgid "can't find: `%s'"
 msgstr "kan niet vinden: `%s'"
 
@@ -536,6 +537,7 @@ msgid "Interpretation context with empty type"
 msgstr "Vertolk context met leeg type"
 
 #: music-output-def.cc:84
+#, c-format
 msgid "can't find `%s' context"
 msgstr "kan `%s' context niet vinden"
 
@@ -567,20 +569,20 @@ msgstr "Ontleden..."
 msgid "Braces don't match"
 msgstr "Haakjes paren niet"
 
-#: paper-column.cc:48
+#: paper-column.cc:49
 msgid "Must set spring between differing columns"
 msgstr "Moet veertje zetten tussen verschillende kolommen"
 
-#: paper-def.cc:69
+#: paper-def.cc:70
 #, c-format
 msgid "unknown paper variable: `%s'"
 msgstr "onbekende papier veranderlijke: `%s'"
 
-#: paper-def.cc:73
+#: paper-def.cc:74
 msgid "not a real variable"
 msgstr "niet een reële veranderlijke"
 
-#: paper-def.cc:180
+#: paper-def.cc:184
 #, c-format
 msgid "paper output to %s..."
 msgstr "papier uitvoer naar %s..."
@@ -643,6 +645,7 @@ msgid "Huh?  Not a Request: `%s'"
 msgstr "Huh?  Geen Request: `%s'"
 
 #: request-iterator.cc:20
+#, c-format
 msgid "Junking music: `%s'"
 msgstr "Schroot muziek: `%s'"
 
@@ -654,7 +657,7 @@ msgstr "te veel botsende rusten"
 msgid "too many notes for rest collision"
 msgstr "te veel noten voor bosting met rusten"
 
-#: score-engraver.cc:139
+#: score-engraver.cc:141
 #, c-format
 msgid "unbound spanner `%s'"
 msgstr "ongebonden spanner `%s'"
@@ -709,6 +712,7 @@ msgid "unterminated slur"
 msgstr "onbeëindigde bindingsboog"
 
 #: slur-engraver.cc:77
+#, c-format
 msgid "can't find both ends of %s"
 msgstr "kan niet beide uiteinden vinden van %s"
 
@@ -724,11 +728,7 @@ msgstr "Zet bindingsboog over rust.  Negeer."
 msgid "Slur over rest?"
 msgstr "Boogje over rust?"
 
-#: spanner.cc:34
-msgid "Left spanpoint is right spanpoint"
-msgstr "Linker spanpunt is rechter spanpunt"
-
-#: spanner.cc:128
+#: spanner.cc:31 spanner.cc:164
 #, c-format
 msgid "Spanner `%s' has equal left and right spanpoints"
 msgstr "Spanner `%s' heeft gelijke linker en rechter spanpunten"
@@ -754,6 +754,7 @@ msgstr ""
 "%s: TFM bestand heeft %u parameters, wat meer is dan de %u die ik aan kan"
 
 #: tfm.cc:70
+#, c-format
 msgid "can't find ascii character: `%d'"
 msgstr "kan teken niet vinden: `%s'"
 
@@ -801,10 +802,12 @@ msgid "Already contains: `%s'"
 msgstr "Bevat reeds: `%s'"
 
 #: translator-group.cc:210
+#, c-format
 msgid "can't find or create `%s' called `%s'"
 msgstr "kan niet vinden of scheppen `%s' genaamd `%s'"
 
 #: translator-group.cc:322
+#, c-format
 msgid "can't find or create: `%s'"
 msgstr "kan niet vinden of scheppen: `%s'"
 
@@ -1085,123 +1088,3 @@ msgstr "% Automatisch gegenereerd"
 #, c-format
 msgid "% from input file: "
 msgstr "% van invoerbestand: "
-
-#~ msgid "(search path: `%s'"
-#~ msgstr "(zoekpad: `%s')"
-
-#~ msgid "Can't find font: `%s'"
-#~ msgstr "Kan font niet vinden: `%s'"
-
-#~ msgid "(search path `%s')"
-#~ msgstr "(zoekpad: `%s')"
-
-#~ msgid "Debug output disabled.  Compiled with NPRINT."
-#~ msgstr "Ontluisberichten zijn uitgeschakeld.  Vertaald met NPRINT."
-
-#~ msgid "no beam to end"
-#~ msgstr "geen waardestreep te beëindigen"
-
-#~ msgid "unfinished beam"
-#~ msgstr "onbeëindigde waardestreep"
-
-#~ msgid "0 lines"
-#~ msgstr "0 regels"
-
-#~ msgid "1 line (of %.0f columns)"
-#~ msgstr "1 regel (van %.0f kolommen)"
-
-#~ msgid "%d lines (with an average of %.1f columns)"
-#~ msgstr "%d regels (van gemiddeld %.1f kolommen)"
-
-#~ msgid "approximated %s"
-#~ msgstr "geschat: %s"
-
-#~ msgid "calculated %s exactly"
-#~ msgstr "exact berekend: %s"
-
-#~ msgid "elapsed time %.2f seconds"
-#~ msgstr "duur: %.2f seconden"
-
-#~ msgid "no tremolo beam to end"
-#~ msgstr "geen tremolo waardestreep te beëindigen"
-
-#~ msgid "unfinished tremolo beam"
-#~ msgstr "onbeëindigde tremolo waardestreep"
-
-#~ msgid "Got a dynamic already.  Continuing dazed and confused."
-#~ msgstr "Heb al een dynamiek.  Ga verder, verstrooid en verward"
-
-#~ msgid "Too many crescendi here"
-#~ msgstr "Te veel cescendi hier"
-
-#~ msgid "Huh?  Empty Line_of_score?"
-#~ msgstr "Huh?  Lege Line_of_score?"
-
-#~ msgid "improbable offset for object type: `%s'"
-#~ msgstr "onwaarschijnlijke verschuiving voor object type: `%s'"
-
-#~ msgid "Can't solve this casting problem exactly; reverting to Word_wrap"
-#~ msgstr "Kan breekprobleem niet exact oplossen; verval naar Word_wrap"
-
-#~ msgid "%s elements"
-#~ msgstr "%s elementen"
-
-#~ msgid "Line ... "
-#~ msgstr "Regel ..."
-
-#~ msgid "degenerate constraints"
-#~ msgstr "voorwaarde is gedegenerederd"
-
-#~ msgid "spanner with negative length"
-#~ msgstr "spanner met negatieve lengte"
-
-#~ msgid "I'm too fat; call Oprah"
-#~ msgstr "Ben te dik; roep Catherine"
-
-#~ msgid "Solution doesn't satisfy constraints"
-#~ msgstr "Oplossing voldoet niet aan voorwaarden"
-
-#~ msgid "Improbable distance: %f point, setting to 10 mm"
-#~ msgstr "Onwaarschijnlijke afstand: %f punten, zet op 10 mm"
-
-#~ msgid "Negative distance, setting to 10 mm"
-#~ msgstr "Negatieve afstand, zet op 10 mm"
-
-#~ msgid "stem direction set already!"
-#~ msgstr "stokrichting is al gezet!"
-
-#~ msgid "unequal number of note heads for tie"
-#~ msgstr "ongelijk aantal notebolletjes voor overbinding"
-
-#~ msgid "cadenza"
-#~ msgstr "cadens"
-
-#~ msgid "Partial measure must be non-negative"
-#~ msgstr "Deelmaat moet niet-negatief zijn"
-
-#~ msgid "partial measure too large"
-#~ msgstr "deelmaat te groot"
-
-#~ msgid "time signature change not allowed here"
-#~ msgstr "maatwisseling is hier niet geoorloofd"
-
-#~ msgid "Ugh, this measure is too long, breakpoint: %d"
-#~ msgstr "Ugh, deze maat is te lang, breukpunt: %d"
-
-#~ msgid "Generating stupido solution"
-#~ msgstr "Genereer sullige oplossing"
-
-#~ msgid "I don't fit; put me on Montignac"
-#~ msgstr "Ik ben te dik; zet me op Montignac"
-
-#~ msgid "Need even number of args for shape array"
-#~ msgstr "Heb even aantal argumenten nodig voor shape array"
-
-#~ msgid "Can't abbreviate"
-#~ msgstr "Kan niet afkorten"
-
-#~ msgid "Can't abbreviate tuplet"
-#~ msgstr "Kan x-ool niet afkorten"
-
-#~ msgid "assume no tuplets"
-#~ msgstr "gebruik geen antimetrische figuren"
index 0e42d834a2eaf09d119d87f19bf5d944b7039fc7..94ceeb50e243360443f6daf9c7dc9f05fb6e1cc2 100644 (file)
@@ -5,19 +5,21 @@
 ;;; (c) 2000 Jan Nieuwenhuizen <janneke@gnu.org>
 
 
+;; define factor of total volume per dynamic marking
 (define absolute-volume-alist '())
 (set! absolute-volume-alist
       (append 
       '(
-       ("sf" . 115)
-       ("fff" . 102)
-       ("ff" . 90)
-       ("f" . 77)
-       ("mf" . 64)
-       ("mp" . 51)
-       ("p" . 38)
-       ("pp" . 26)
-       ("ppp" . 13)
+       ("sf" . 1.00)
+       ("ffff" . 0.91)
+       ("fff" . 0.81)
+       ("ff" . 0.71)
+       ("f" . 0.61)
+       ("mf" . 0.50)
+       ("mp" . 0.40)
+       ("p" . 0.30)
+       ("pp" . 0.20)
+       ("ppp" . 0.10)
        )
       absolute-volume-alist))
 
     (if entry
        (cdr entry))))
 
-;; 90 is supposed to be the default value
+;; define factors of total volume of minimum and maximum volume
+(define instrument-equaliser-alist '())
+(set! instrument-equaliser-alist
+      (append 
+       '(
+        ("flute" . (0 . 0.6))
+        ("oboe" . (0 . 0.7))
+        ("clarinet" . (0 . 0.7))
+        ("bassoon" . (0 . 0.6))
+        ("french horn" . (0.1 . 0.7))
+        ("trumpet" . (0.1 . 0.8))
+        ("timpani" . (0.2 . 0.9))
+        ("violin" . (0.2 . 1.0))
+        ("viola" . (0.1 . 0.7))
+        ("cello" . (0.2 . 0.8))
+        ("contrabass" . (0.2 . 0.8))
+        )
+       instrument-equaliser-alist))
+
+(define (instrument-equaliser s)
+  (let ((entry (assoc s instrument-equaliser-alist)))
+    (if entry
+       (cdr entry))))
+
+;; 90 == 90/127 == 0.71 is supposed to be the default value
 ;; urg: we should set this at start of track
-(define dynamic-default-volume 90)
+(define dynamic-default-volume 0.71)