From 79cb69f922f570e6a1b032687e14ba32f1a6f6db Mon Sep 17 00:00:00 2001 From: fred Date: Sun, 24 Mar 2002 19:42:58 +0000 Subject: [PATCH] lilypond-0.0.62 --- lib/duration-convert.cc | 162 +++++++++++++++++++--------------------- mi2mu/.version | 4 +- 2 files changed, 78 insertions(+), 88 deletions(-) diff --git a/lib/duration-convert.cc b/lib/duration-convert.cc index ad2e245ba4..882d275b3c 100644 --- a/lib/duration-convert.cc +++ b/lib/duration-convert.cc @@ -15,6 +15,7 @@ bool Duration_convert::no_quantify_b_s = false; bool Duration_convert::no_double_dots_b_s = false; bool Duration_convert::no_triplets_b_s = false; int Duration_convert::no_smaller_than_i_s = 0; +Array Duration_convert::dur_array_s; String Duration_convert::dur2_str( Duration dur ) @@ -84,53 +85,66 @@ Duration_convert::i2_mom( int time_i, int division_1_i ) Duration Duration_convert::mom2_dur( Moment mom ) { - /* this is cute, - but filling an array using Duration_iterator - might speed things up, a little - */ - Duration_iterator iter_dur; - assert( iter_dur ); - while ( iter_dur ) { - Duration dur = iter_dur++; - if ( mom == dur2_mom( dur ) ) - return dur; - } - if ( midi_as_plet_b_s ) { - Moment mom_4 = mom / Moment( 4 ); - long num = mom_4.numerator().as_long(); - long den = mom_4.denominator().as_long(); - Duration dur( 4, 0 ); - dur.set_plet( num, den ); + if (!mom) { + Duration dur; + dur.set_plet(0,1); + return dur; + } + + + Duration dur = mom2standardised_dur( mom ); +// if ( dur.mom() == mom ) + if ( dur.length() == mom ) return dur; - } - assert( 0 ); - // no can do - Duration dur( 0 ); + assert( midi_as_plet_b_s ); + +// dur.set_plet( type_mom, Duration::division_1_i_s / 4 ); + +// Moment as_plet_mom = mom / dur.mom(); + Moment as_plet_mom = mom / dur.length(); + as_plet_mom *= dur.plet_.mom(); + long num = as_plet_mom.numerator().as_long(); + long den = as_plet_mom.denominator().as_long(); + dur.set_plet( num, den ); return dur; } Duration Duration_convert::mom2standardised_dur( Moment mom ) { - /* this is cute, - but filling an array using Duration_iterator - might speed things up, a little - */ +// if ( !dur_array_s.length_i() ) + if ( !dur_array_s.size() ) + set_array(); +// assert( dur_array_s.length_i() ); + assert( dur_array_s.size() ); +// for ( int i = 0; i < dur_array_s.length_i() - 1; i++ ) { + for ( int i = 0; i < dur_array_s.size() - 1; i++ ) { + Moment lower_mom = dur2_mom( dur_array_s[ i ] ); + if ( mom <= lower_mom ) { + if ( i || ( mom / lower_mom > Moment( 3, 4 ) ) ) + return dur_array_s[ i ]; + else + return Duration( 0 ); + } + Moment upper_mom = dur2_mom( dur_array_s[ i + 1 ] ); + if ( ( mom < upper_mom ) + && ( ( mom - lower_mom ) / mom + < ( upper_mom - mom ) / mom ) ) + return dur_array_s[ i ]; + } +// return dur_array_s[ dur_array_s.length_i() ]; + return dur_array_s[ dur_array_s.size() - 1 ]; +} + +void +Duration_convert::set_array() +{ + dur_array_s.clear(); + Duration_iterator iter_dur; assert( iter_dur ); - while ( iter_dur ) { - Duration lower_dur = iter_dur++; - Duration upper_dur( 0 ); - if ( iter_dur ) - upper_dur = iter_dur(); - Moment lower_mom = dur2_mom( lower_dur ); - Moment upper_mom = dur2_mom( upper_dur ); - if ( mom < lower_mom ) - return lower_dur; - if ( mom == lower_mom ) - return lower_dur; - } - return iter_dur(); + while ( iter_dur ) + dur_array_s.push( iter_dur++ ); } @@ -149,64 +163,40 @@ Duration_convert::sync_f( Duration dur, Moment mom ) Duration Duration_convert::ticks2_dur( int ticks_i ) { - /* this is cute, - but filling an array using Duration_iterator - might speed things up, a little - */ - // should use mom2_dur +// Duration dur( 4, 0 ); +// dur.set_plet( ticks_i, Duration::division_1_i_s / 4 ); + Moment mom( ticks_i, Duration::division_1_i_s ); - Duration_iterator iter_dur; - assert( iter_dur ); - while ( iter_dur ) { - Duration dur = iter_dur++; - if ( mom == dur2_mom( dur ) ) - return dur; - } - if ( midi_as_plet_b_s ) { - Duration dur( 4, 0 ); - dur.set_plet( ticks_i, Duration::division_1_i_s / 4 ); + 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; - } - Duration dur( 0 ); + +// huh? +#if 0 + dur.type_i_ = 0; + dur.dots_i_ = 0; dur.set_ticks( ticks_i ); return dur; +#else + return mom2_dur( mom ); +#endif } Duration Duration_convert::ticks2standardised_dur( int ticks_i ) { - /* this is cute, - but filling an array using Duration_iterator - might speed things up, a little - */ - // should use mom2standardised_dur Moment mom( ticks_i, Duration::division_1_i_s ); - Duration_iterator iter_dur; - assert( iter_dur ); - while ( iter_dur ) { - Duration lower_dur = iter_dur++; -// Duration upper_dur( 0 ); - Duration upper_dur( 1, 1 ); - if ( iter_dur ) - upper_dur = iter_dur(); - Moment lower_mom = dur2_mom( lower_dur ); - Moment upper_mom = dur2_mom( upper_dur ); - if ( mom < lower_mom ) - return lower_dur; - if ( mom == lower_mom ) - return lower_dur; - if ( mom == upper_mom ) // don-t miss last (sic) - return upper_dur; - if ( ( mom >= lower_mom ) && ( mom <= upper_mom ) ) { - warning( String( "duration not exact: " ) + String( (Real)mom ) ); - if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) ) - return lower_dur; - else - return upper_dur; - } - lower_dur = upper_dur; - } - return iter_dur(); + Duration dur = mom2standardised_dur( mom ); + +// if ( dur.mom() != mom ) + if ( dur.length() != mom ) + warning( String( "duration not exact: " ) + String( (Real)mom ) ); + return dur; } Duration_iterator::Duration_iterator() diff --git a/mi2mu/.version b/mi2mu/.version index 8ebe023f19..af965a51c4 100644 --- a/mi2mu/.version +++ b/mi2mu/.version @@ -1,6 +1,6 @@ MAJOR_VERSION = 0 MINOR_VERSION = 0 -PATCH_LEVEL = 14 +PATCH_LEVEL = 15 # use to send patches, always empty for released version: -MY_PATCH_LEVEL = # include separator: "-1" or ".a" +MY_PATCH_LEVEL = # -- 2.39.5