]> git.donarmstrong.com Git - lilypond.git/blob - lily/audio-item.cc
typo.
[lilypond.git] / lily / audio-item.cc
1 /*
2   audio-item.cc -- implement Audio items.
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997--2006 Jan Nieuwenhuizen <janneke@gnu.org>
7 */
8
9 #include "audio-item.hh"
10
11 #include "midi-item.hh"
12 #include "audio-column.hh"
13
14 Audio_instrument::Audio_instrument (string instrument_string)
15 {
16   str_ = instrument_string;
17 }
18
19 void
20 Audio_item::render ()
21 {
22 }
23
24 Audio_column *
25 Audio_item::get_column () const
26 {
27   return audio_column_;
28 }
29
30 Audio_item::Audio_item ()
31 {
32   audio_column_ = 0;
33 }
34
35 Audio_note::Audio_note (Pitch p, Moment m, bool tie_event, int transposing_i)
36 {
37   pitch_ = p;
38   length_mom_ = m;
39   tied_ = 0;
40   transposing_ = transposing_i;
41   tie_event_ = tie_event;
42 }
43
44 void
45 Audio_note::tie_to (Audio_note *t)
46 {
47   tied_ = t;
48   Audio_note *first = t;
49   while (first->tied_)
50     first = first->tied_;
51   first->length_mom_ += length_mom_;
52   length_mom_ = 0;
53 }
54
55 Audio_key::Audio_key (int acc, bool major)
56 {
57   accidentals_ = acc;
58   major_ = major;
59 }
60
61 Audio_dynamic::Audio_dynamic ()
62 {
63   volume_ = -1;
64 }
65
66 Audio_span_dynamic::Audio_span_dynamic ()
67 {
68   grow_dir_ = CENTER;
69 }
70
71 void
72 Audio_span_dynamic::add_absolute (Audio_dynamic *d)
73 {
74   assert (d);
75   dynamics_.push_back (d);
76 }
77
78 static Real
79 moment2real (Moment m)
80 {
81   return m.main_part_.to_double ()
82     + 0.1 * m.grace_part_.to_double ();
83 }
84
85
86 void
87 Audio_span_dynamic::render ()
88 {
89   if (dynamics_.size () <= 1)
90     return ;
91
92   assert (dynamics_[0]->volume_ >= 0);
93
94   if (dynamics_.back ()->volume_ > 0
95       && sign (dynamics_.back ()->volume_ - dynamics_[0]->volume_) != grow_dir_)
96     {
97       dynamics_.erase (dynamics_.end () - 1);
98       assert (dynamics_.back ()->volume_ < 0);
99     }
100
101   if (dynamics_.size () <= 1)
102     return ;
103
104   Real delta_v = grow_dir_ * 0.1;
105   
106   Real start_v = dynamics_[0]->volume_;
107   if (dynamics_.back ()->volume_ < 0)
108     dynamics_.back ()->volume_ = max (min (start_v + grow_dir_ * 0.25, 1.0), 0.0);
109
110   delta_v = dynamics_.back ()->volume_ - dynamics_[0]->volume_;
111
112   Moment start = dynamics_[0]->get_column ()->when ();
113
114   Real total_t = moment2real (dynamics_.back ()->get_column ()->when () - start);
115   
116   for (vsize i = 1; i < dynamics_.size(); i ++)
117     {
118       Moment dt_moment = dynamics_[i]->get_column ()->when ()
119         - start;
120
121       Real dt =  moment2real (dt_moment);
122       
123       Real v = start_v + delta_v *  (dt / total_t);
124
125       dynamics_[i]->volume_ = v;        
126     }
127 }
128
129
130
131 Audio_tempo::Audio_tempo (int per_minute_4)
132 {
133   per_minute_4_ = per_minute_4;
134 }
135
136 Audio_time_signature::Audio_time_signature (int beats, int one_beat)
137 {
138   beats_ = beats;
139   one_beat_ = one_beat;
140 }
141
142 Audio_text::Audio_text (Audio_text::Type type, string text_string)
143 {
144   text_string_ = text_string;
145   type_ = type;
146 }
147