2 // midi-def.cc -- implement midi output
4 // source file of the GNU LilyPond music typesetter
6 // (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
10 #include "midi-def.hh"
11 #include "input-translator.hh"
12 #include "performer-group-performer.hh"
13 #include "assoc-iter.hh"
17 // classes, alphasorted
21 // routines, alphasorted
25 int Midi_def::den_i_s = 4;
26 int Midi_def::num_i_s = 4;
30 outfile_str_ = "lelie.midi";
32 real_vars_p_ = new Assoc<String,Real>;
34 set_tempo( Moment( 1, 4 ), 60 );
37 Midi_def::Midi_def( Midi_def const& s )
39 whole_seconds_f_ = s.whole_seconds_f_;
40 itrans_p_ = s.itrans_p_ ? new Input_translator( *s.itrans_p_ ) : 0;
41 real_vars_p_ = new Assoc<String,Real> ( *s.real_vars_p_ );
42 outfile_str_ = s.outfile_str_;
52 Midi_def::duration_to_seconds_f( Moment mom )
57 return Moment( whole_seconds_f_ ) * mom;
61 Midi_def::get_global_translator_p() const
63 return itrans_p_->get_group_performer_p()->global_l();
67 Midi_def::get_var( String s ) const
69 if ( !real_vars_p_->elt_b( s ) )
70 error ( "unknown midi variable `" + s + "'" );
71 return real_vars_p_->elem( s );
75 Midi_def::get_tempo_i( Moment moment )
77 return Moment( whole_seconds_f_ ) * Moment( 60 ) * moment;
81 Midi_def::print() const
85 mtor << "4/min: " << Real( 60 ) / ( whole_seconds_f_ * 4 );
86 mtor << "out: " << outfile_str_;
87 for (Assoc_iter<String,Real> i( *real_vars_p_ ); i.ok(); i++) {
88 mtor << i.key() << "= " << i.val() << "\n";
95 Midi_def::set( Input_translator* itrans_p )
102 Midi_def::set_tempo( Moment moment, int count_per_minute_i )
104 whole_seconds_f_ = Moment( count_per_minute_i ) / Moment( 60 ) / moment;
108 Midi_def::set_var( String s, Real r )
110 real_vars_p_->elem( s ) = r;