X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;ds=sidebyside;f=lily%2Ftiming-translator.cc;h=5bee235cd67d303f51b8cf82c51895ec6417c0b8;hb=8536db51578c1d3ba3da834e5a308c2790dd4f87;hp=f5a57d158d175b8b5ee22b7c146cfde5aedc4d63;hpb=e24df7c27635dc996c466295eacf2981bddccaf7;p=lilypond.git diff --git a/lily/timing-translator.cc b/lily/timing-translator.cc index f5a57d158d..5bee235cd6 100644 --- a/lily/timing-translator.cc +++ b/lily/timing-translator.cc @@ -28,14 +28,14 @@ Timing_translator::stop_translation_timestep () bool timb = to_boolean (tim); if (timb && allbars) { - Moment barleft = (measure_length () - measure_position ()); + Moment barleft = (measure_length () - measure_position (context ())); Moment now = now_mom (); if (barleft > Moment (0) /* Hmm. We insert the bar moment every time we process a moment. A waste of cpu? - */ + */ && !now.grace_part_) global->add_moment_to_process (now + barleft); } @@ -46,20 +46,20 @@ Timing_translator::initialize () { /* - move this to engraver-init.ly? - */ + move this to engraver-init.ly? + */ context ()->add_alias (ly_symbol2scm ("Timing")); - context ()->set_property ("timing" , SCM_BOOL_T); - context ()->set_property ("currentBarNumber" , scm_int2num (1)); + context ()->set_property ("timing", SCM_BOOL_T); + context ()->set_property ("currentBarNumber", scm_int2num (1)); context ()->set_property ("timeSignatureFraction", - scm_cons (scm_int2num (4), scm_int2num (4))); + scm_cons (scm_int2num (4), scm_int2num (4))); /* Do not init measurePosition; this should be done from global context. - */ + */ context ()->set_property ("measureLength", Moment (Rational (1)).smobbed_copy ()); - context ()->set_property ("beatLength", Moment (Rational (1,4)).smobbed_copy ()); + context ()->set_property ("beatLength", Moment (Rational (1, 4)).smobbed_copy ()); } Rational @@ -74,24 +74,8 @@ Timing_translator::measure_length () const Timing_translator::Timing_translator () { - } -Moment -Timing_translator::measure_position () const -{ - SCM sm = get_property ("measurePosition"); - - Moment m = 0; - if (unsmob_moment (sm)) - { - m = *unsmob_moment (sm); - while (m.main_part_ < Rational (0)) - m.main_part_ += measure_length (); - } - - return m; -} void Timing_translator::start_translation_timestep () @@ -99,18 +83,18 @@ Timing_translator::start_translation_timestep () Global_context *global = get_global_context (); Moment now = global->now_mom (); - Moment dt = now - global->previous_moment (); + Moment dt = now - global->previous_moment (); if (dt < Moment (0)) { - programming_error ("Moving backwards in time"); + programming_error ("moving backwards in time"); dt = 0; } else if (dt.main_part_.is_infinity ()) { - programming_error ("Moving infinitely to future"); + programming_error ("moving infinitely to future"); dt = 0; } - + if (!dt.to_bool ()) return; @@ -127,9 +111,9 @@ Timing_translator::start_translation_timestep () context ()->set_property ("measurePosition", measposp.smobbed_copy ()); } - + measposp += dt; - + SCM barn = get_property ("currentBarNumber"); int b = 0; if (scm_is_number (barn)) @@ -144,16 +128,24 @@ Timing_translator::start_translation_timestep () while (c && measposp.main_part_ >= len) { measposp.main_part_ -= len; - b ++; + b++; } context ()->set_property ("currentBarNumber", scm_int2num (b)); context ()->set_property ("measurePosition", measposp.smobbed_copy ()); } +#include "translator.icc" + ADD_TRANSLATOR (Timing_translator, - "This engraver adds the alias " - "@code{Timing} to its containing context." - , + "This engraver adds the alias " + "@code{Timing} to its containing context." + "Responsible for synchronizing timing information from staves. " + "Normally in @code{Score}. In order to create polyrhythmic music, " + "this engraver should be removed from @code{Score} and placed in " + "@code{Staff}. " + "\n\nThis engraver adds the alias @code{Timing} to its containing context." + + , - "","","","",""); + "", "", "", "");