From dedb30acb8a884ba0089655f444746cbff0e936a Mon Sep 17 00:00:00 2001 From: fred Date: Tue, 11 Mar 1997 23:27:06 +0000 Subject: [PATCH] lilypond-0.0.41 --- lib/duration.cc | 131 +++++++++++++++++++++++++++++--- mi2mu/include/my-midi-parser.hh | 2 +- 2 files changed, 120 insertions(+), 13 deletions(-) diff --git a/lib/duration.cc b/lib/duration.cc index b078b78c85..f737d660d1 100644 --- a/lib/duration.cc +++ b/lib/duration.cc @@ -14,11 +14,15 @@ #include "duration.hh" #include "debug.hh" //ugh +// statics Duration +int Duration::division_1_i_s = 384 * 4; + Duration::Duration( int type_i, int dots_i = 0, Plet* plet_l ) { type_i_ = type_i; dots_i_ = dots_i; plet_p_ = 0; + ticks_i_ = 0; set_plet( plet_l ); } @@ -27,6 +31,7 @@ Duration::Duration( Duration const& dur_c_r ) type_i_ = 0; dots_i_ = 0; plet_p_ = 0; + ticks_i_ = 0; *this = dur_c_r; } @@ -43,6 +48,7 @@ Duration::operator =( Duration const& dur_c_r ) type_i_ = dur_c_r.type_i_; dots_i_ = dur_c_r.dots_i_; + ticks_i_ = dur_c_r.ticks_i_; set_plet( dur_c_r.plet_p_ ); return *this; @@ -57,6 +63,15 @@ Duration::set_plet( Plet* plet_l ) plet_p_ = new Plet( *plet_l ); } +void +Duration::set_ticks( int ticks_i ) +{ + assert( !type_i_ ); + assert( !dots_i_ ); + assert( !plet_p_ ); + ticks_i_ = ticks_i; +} + Plet::Plet( int iso_i, int type_i ) { iso_i_ = iso_i; @@ -69,9 +84,18 @@ Plet::Plet( Plet const& plet_c_r ) type_i_ = plet_c_r.type_i_; } +// statics Duration_convert +bool Duration_convert::be_blonde_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; + String Duration_convert::dur2_str( Duration dur ) { + if ( dur.ticks_i_ ) + return String( "[" ) + String( dur.ticks_i_ ) + "]"; + String str( dur.type_i_ ); str += String( '.', dur.dots_i_ ); if ( dur.plet_p_ ) @@ -80,17 +104,31 @@ Duration_convert::dur2_str( Duration dur ) return str; } +#if 0 int Duration_convert::dur2_i( Duration dur, int division_1_i ) { - return dur2_mom( dur ) * Moment( division_1_i ); + return dur2_mom( dur ) * Moment( division_1_i ); +} +#endif + +int +Duration_convert::dur2ticks_i( Duration dur ) +{ + if ( dur.ticks_i_ ) + return dur.ticks_i_; + return dur2_mom( dur ) * Moment( Duration::division_1_i_s ); } Moment Duration_convert::dur2_mom( Duration dur ) { + if ( dur.ticks_i_ ) + return Moment( dur.ticks_i_, Duration::division_1_i_s ); + + // or simply assert? if ( !dur.type_i_ ) - return 0; + return Moment( 0 ); Moment mom = Moment( 1 , dur.type_i_ ); @@ -103,6 +141,21 @@ Duration_convert::dur2_mom( 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 + +#if 0 Duration Duration_convert::mom2_dur( Moment mom ) { @@ -134,6 +187,7 @@ Duration_convert::mom2_dur( Moment mom ) } return Duration( 0 ); } +#endif Moment Duration_convert::plet_factor_mom( Duration dur ) @@ -149,21 +203,67 @@ Duration_convert::sync_f( Duration dur, Moment mom ) return mom / dur2_mom( dur ); } -Moment -Duration_convert::i2_mom( int time_i, int division_1_i ) +Duration +Duration_convert::ticks2_dur( int ticks_i ) { - if ( !time_i ) - return Moment( 0 ); + /* this is cute, + but filling an array using Duration_iterator + might speed things up, a little + */ + 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; + } + Duration dur( 0 ); + dur.set_ticks( ticks_i ); + return dur; +} - if ( division_1_i > 0 ) - return Moment( time_i, division_1_i ); - else - return Moment( -division_1_i, time_i ); +Duration +Duration_convert::ticks2standardised_dur( int ticks_i ) +{ + /* this is cute, + but filling an array using Duration_iterator + might speed things up, a little + */ + 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 ) , 0 ); + if ( abs( mom - lower_mom ) < abs( mom - upper_mom ) ) + return lower_dur; + else + return upper_dur; + } + lower_dur = upper_dur; + } + return iter_dur(); } Duration_iterator::Duration_iterator() { cursor_dur_.type_i_ = 128; + if ( Duration_convert::no_smaller_than_i_s ) + cursor_dur_.type_i_ = Duration_convert::no_smaller_than_i_s; cursor_dur_.set_plet( 0 ); } @@ -232,8 +332,15 @@ Duration_iterator::forward_dur() cursor_dur_.type_i_ /= 2; } - // ugh - if ( no_triplets_bo_g && cursor_dur_.plet_p_ && ok() ) + if ( Duration_convert::no_triplets_b_s && cursor_dur_.plet_p_ && ok() ) + forward_dur(); + if ( Duration_convert::no_double_dots_b_s && ( cursor_dur_.dots_i_ == 2 ) && ok() ) + forward_dur(); + if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.type_i_ > Duration_convert::no_smaller_than_i_s ) && ok() ) + forward_dur(); + if ( Duration_convert::no_smaller_than_i_s && cursor_dur_.dots_i_ && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s ) && ok() ) + forward_dur(); + if ( Duration_convert::no_smaller_than_i_s && ( cursor_dur_.dots_i_ == 2 ) && ( cursor_dur_.type_i_ >= Duration_convert::no_smaller_than_i_s / 2 ) && ok() ) forward_dur(); return dur; diff --git a/mi2mu/include/my-midi-parser.hh b/mi2mu/include/my-midi-parser.hh index 66de991259..02bbb843e8 100644 --- a/mi2mu/include/my-midi-parser.hh +++ b/mi2mu/include/my-midi-parser.hh @@ -28,7 +28,7 @@ public: void reset(); void set_division_4( int division_4_i ); void set_key( int accidentals_i, int minor_i ); - void set_tempo( int useconds_i ); + void set_tempo( int useconds_per_4_i ); void set_time( int num_i, int den_i, int clocks_i, int count_32_i ); int bar_i_; -- 2.39.5