2 // mudela-voice.cc -- implement Mudela_voice
4 // copyright 1997 Jan Nieuwenhuizen <janneke@gnu.org>
6 #include "string-convert.hh"
7 #include "mi2mu-global.hh"
8 #include "mudela-column.hh"
9 #include "mudela-item.hh"
10 #include "mudela-staff.hh"
11 #include "mudela-stream.hh"
12 #include "mudela-voice.hh"
13 #include "mudela-score.hh"
15 extern Mudela_score
* mudela_score_l_g
;
17 Mudela_voice::Mudela_voice (Mudela_staff
* mudela_staff_l
)
19 mudela_staff_l_
= mudela_staff_l
;
23 Mudela_voice::add_item (Mudela_item
* mudela_item_l
)
25 mudela_item_l_list_
.append (new Cons
<Mudela_item
> (mudela_item_l
, 0));
29 static int const FAIRLY_LONG_VOICE_i
= 6;
32 Mudela_voice::output (Mudela_stream
& mudela_stream_r
)
34 if (!mudela_item_l_list_
.size_i ())
37 if (mudela_item_l_list_
.size_i () > FAIRLY_LONG_VOICE_i
)
38 mudela_stream_r
<< '\n';
40 int current_bar_i
= 0;
41 Moment bar_mom
= mudela_staff_l_
->mudela_time_signature_l_
->bar_mom ();
43 for (Cons
<Mudela_item
>* i
= mudela_item_l_list_
.head_
; i
; i
= i
->next_
)
45 Moment at_mom
= i
->car_
->mudela_column_l_
->at_mom ();
46 int bar_i
= (int) (at_mom
/ bar_mom
) + 1;
47 if (bar_i
> current_bar_i
)
51 if (at_mom
== Moment (bar_i
- 1) * bar_mom
)
52 mudela_stream_r
<< "|";
53 mudela_stream_r
<< "\n% ";
54 mudela_stream_r
<< String_convert::i2dec_str (bar_i
, 0, ' ');
55 mudela_stream_r
<< '\n';
57 LOGOUT (NORMAL_ver
) << "[" << bar_i
<< "]" << flush
;
58 current_bar_i
= bar_i
;
61 mudela_stream_r
<< *i
->car_
;
62 if (Mudela_key
* k
= dynamic_cast<Mudela_key
*> (i
->car_
))
63 mudela_staff_l_
->mudela_key_l_
= mudela_score_l_g
->mudela_key_l_
= k
;
66 if (mudela_item_l_list_
.size_i () > FAIRLY_LONG_VOICE_i
)
67 mudela_stream_r
<< '\n';