2 midi-def.cc -- implement Midi_def
4 source file of the GNU LilyPond music typesetter
6 (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
11 #include "midi-def.hh"
12 #include "input-translator.hh"
13 #include "performer-group-performer.hh"
14 #include "assoc-iter.hh"
18 // classes, alphasorted
22 // routines, alphasorted
26 int Midi_def::den_i_s = 4;
27 int Midi_def::num_i_s = 4;
31 outfile_str_ = "lelie.midi";
33 real_vars_p_ = new Assoc<String,Real>;
35 set_tempo( Moment( 1, 4 ), 60 );
38 Midi_def::Midi_def( Midi_def const& s )
40 whole_seconds_f_ = s.whole_seconds_f_;
41 itrans_p_ = s.itrans_p_ ? new Input_translator( *s.itrans_p_ ) : 0;
42 real_vars_p_ = new Assoc<String,Real> ( *s.real_vars_p_ );
43 outfile_str_ = s.outfile_str_;
53 Midi_def::duration_to_seconds_f( Moment mom )
58 return Moment( whole_seconds_f_ ) * mom;
62 Midi_def::get_global_translator_p() const
64 return itrans_p_->get_group_performer_p()->global_l();
68 Midi_def::get_var( String s ) const
70 if ( !real_vars_p_->elt_b( s ) )
71 error ( "unknown midi variable `" + s + "'" );
72 return real_vars_p_->elem( s );
76 Midi_def::get_tempo_i( Moment moment )
78 return Moment( whole_seconds_f_ ) * Moment( 60 ) * moment;
82 Midi_def::print() const
86 mtor << "4/min: " << Real( 60 ) / ( whole_seconds_f_ * 4 );
87 mtor << "out: " << outfile_str_;
88 for (Assoc_iter<String,Real> i( *real_vars_p_ ); i.ok(); i++) {
89 mtor << i.key() << "= " << i.val() << "\n";
96 Midi_def::set( Input_translator* itrans_p )
103 Midi_def::set_tempo( Moment moment, int count_per_minute_i )
105 whole_seconds_f_ = Moment( count_per_minute_i ) / Moment( 60 ) / moment;
109 Midi_def::set_var( String s, Real r )
111 real_vars_p_->elem( s ) = r;