}
IMPLEMENT_STATIC_NAME(Key_change_req);
+void
+Key_change_req::squash_octaves()
+{
+ for (int i=0; i < melodic_p_arr_.size(); i++) {
+ melodic_p_arr_[i]->octave_i_ = 0;
+ }
+}
void
Key_change_req::do_print() const
Key_change_req::Key_change_req()
{
minor_b_ = false;
+ multi_octave_b_= false;
}
Key_change_req::Key_change_req(Key_change_req const&c)
for (int i=0; i < c.melodic_p_arr_.size(); i++)
melodic_p_arr_.push( c.melodic_p_arr_[i]->clone()->melodic() );
minor_b_ = c.minor_b_;
+ multi_octave_b_ = c.multi_octave_b_;
}
Key_change_req::~Key_change_req()
Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
assert( mel_l );
if ( mel_l->accidental_i_ < 0 )
- flats_i++;
+ flats_i -= mel_l->accidental_i_;
}
return flats_i;
}
Melodic_req* mel_l = melodic_p_arr_[i]->melodic();
assert( mel_l );
if ( mel_l->accidental_i_ > 0 )
- sharps_i++;
+ sharps_i+= mel_l->accidental_i_;
}
return sharps_i;
}
/*
- key.hh -- declare Key
+ key.hh -- declare Key, Octave_key
(c) 1996,97 Han-Wen Nienhuys
*/
#include "varray.hh"
#include "scalar.hh"
-/// administration of current key
-class Key {
- Array<int> accidental_i_arr_;
-
- /* *************** */
+/// administration of current key in one octave.
+class Octave_key {
public:
+ Array<int> accidental_i_arr_;
Key();
void set(int i, int acc);
};
/// administration of accidentals
-struct Local_key
+class Key
{
- void reset(Key);
- Key& oct(int);
- Local_key();
-
-private:
- Array<Key> octaves;
+ /** for each octave a key. Has to be private since octave 0 isn't member 0.
+ */
+ Array<Octave_key> octaves;
+public:
+ bool multi_octave_b_;
+
+ Octave_key&oct(int);
+ Octave_key oct(int) const;
+ void set(int name, int acc);
+ void set(int oct, int name, int acc);
+ Key();
};
#endif // KEY_HH
/*
- staff-info.hh -- declare
+ staff-info.hh -- declare Staff_info
source file of the LilyPond music typesetter
/// when is now?
Time_description const *time_C_;
Rhythmic_grouping const *rhythmic_C_;
+
+ ///
bool break_allowed_b_;
Moment when();
void
Key_item::read(Key_register const & key_reg_r)
{
+ assert(!key_reg_r.key_.multi_octave_b_);
const Array<int> &idx_arr =key_reg_r.accidental_idx_arr_;
for (int i = 0 ; i< idx_arr.size(); i++) {
int note = idx_arr[i];
- int acc = key_reg_r.key_.acc(note);
+ int acc = key_reg_r.key_.oct(0).acc(note);
add(note, acc);
}
const int OCTAVES=14; // ugh..
const int ZEROOCTAVE=7;
-Key::Key()
+Octave_key::Octave_key()
{
accidental_i_arr_.set_size(7);
for (int i= 0; i < 7 ; i++)
accidental_i_arr_[i] = 0;
}
-Local_key::Local_key()
+Key::Key()
{
+ multi_octave_b_ = false;
octaves.set_size(OCTAVES);
}
-Key&
-Local_key::oct(int i)
+Octave_key&
+Key::oct(int i)
+{
+ return octaves[i+ZEROOCTAVE];
+}
+
+Octave_key
+Key::oct(int i)const
{
return octaves[i+ZEROOCTAVE];
}
void
-Key::set(int i, int a)
+Octave_key::set(int i, int a)
{
assert(a > -3 && a < 3);
accidental_i_arr_[i]=a;
}
+void
+Key::set(int o, int n , int a)
+{
+ octaves[o + ZEROOCTAVE].set(n,a);
+}
void
-Local_key::reset(Key k)
+Key::set (int n, int a)
{
for (int i= 0; i < OCTAVES ; i++)
- octaves[i] = k;
+ octaves[i].set(n,a);
}
-
Key_register * key_reg_l =
(Key_register*)info.origin_reg_l_arr_[0];
key_C_ = &key_reg_l->key_;
- local_key_.reset(*key_C_);
+ local_key_ = *key_C_;
}
}
Time_description const * time_C_ = get_staff_info().time_C_;
if (! time_C_->whole_in_measure_){
if (key_C_)
- local_key_.reset(*key_C_);
+ local_key_= *key_C_;
else if( time_C_->when_ >Moment(0))
warning ("Help me! can't figure current key");
}