X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmidi-def.cc;h=e42f2dce6e4e7c3fab47266dd8cb937566fda09b;hb=ea9e5d2536fd8234d1c7e48acc26e161d1df90d4;hp=5e76d11805bda19dd57052a0f57671f0e779e7dd;hpb=eeafd68c62481b0d10c292f0e4bfa5d821168c87;p=lilypond.git diff --git a/lily/midi-def.cc b/lily/midi-def.cc index 5e76d11805..e42f2dce6e 100644 --- a/lily/midi-def.cc +++ b/lily/midi-def.cc @@ -1,112 +1,51 @@ -// -// midi-def.cc -- implement midi output -// -// source file of the GNU LilyPond music typesetter -// -// (c) 1997 Jan Nieuwenhuizen +/* + midi-def.cc -- implement Midi_def + source file of the GNU LilyPond music typesetter + + (c) 1997--2003 Jan Nieuwenhuizen + +*/ #include #include "misc.hh" #include "midi-def.hh" -#include "input-translator.hh" -#include "performer-group-performer.hh" -#include "assoc-iter.hh" - -#include "debug.hh" - -// classes, alphasorted -// statics -// constructors -// destructor -// routines, alphasorted - -// statics Midi_def -// ugh -int Midi_def::den_i_s = 4; -int Midi_def::num_i_s = 4; - -Midi_def::Midi_def() -{ - outfile_str_ = "lelie.midi"; - itrans_p_ = 0; - real_vars_p_ = new Assoc; - // ugh - set_tempo( Moment( 1, 4 ), 60 ); -} +#include "performance.hh" +#include "warn.hh" +#include "scm-hash.hh" -Midi_def::Midi_def( Midi_def const& s ) +Midi_def::Midi_def () { - whole_seconds_f_ = s.whole_seconds_f_; - itrans_p_ = s.itrans_p_ ? new Input_translator( *s.itrans_p_ ) : 0; - real_vars_p_ = new Assoc ( *s.real_vars_p_ ); - outfile_str_ = s.outfile_str_; -} - -Midi_def::~Midi_def() -{ - delete itrans_p_; - delete real_vars_p_; -} - -Real -Midi_def::duration_to_seconds_f( Moment mom ) -{ - if ( !mom ) - return 0; - - return Moment( whole_seconds_f_ ) * mom; -} - -Global_translator* -Midi_def::get_global_translator_p() const -{ - return itrans_p_->get_group_performer_p()->global_l(); -} - -Real -Midi_def::get_var( String s ) const -{ - if ( !real_vars_p_->elt_b( s ) ) - error ( "unknown midi variable `" + s + "'" ); - return real_vars_p_->elem( s ); + // ugh + set_tempo (Moment (Rational (1, 4)), 60); } int -Midi_def::get_tempo_i( Moment moment ) +Midi_def::get_tempo (Moment one_beat_mom) { - return Moment( whole_seconds_f_ ) * Moment( 60 ) * moment; -} + SCM wis = ly_symbol2scm ("whole-in-seconds"); + Moment *w = unsmob_moment (lookup_variable (wis)); -void -Midi_def::print() const -{ -#ifndef NPRINT - mtor << "Midi {"; - mtor << "4/min: " << Real( 60 ) / ( whole_seconds_f_ * 4 ); - mtor << "out: " << outfile_str_; - for (Assoc_iter i( *real_vars_p_ ); i.ok(); i++) { - mtor << i.key() << "= " << i.val() << "\n"; + Moment wholes_per_min = Moment (60); + if (!w) + { + programming_error ("wholes-in-seconds not set."); + wholes_per_min /= 4; } - mtor << "}\n"; -#endif -} - -void -Midi_def::set( Input_translator* itrans_p ) -{ - delete itrans_p_; - itrans_p_ = itrans_p; + else + { + wholes_per_min /= *w; + } + + int beats_per_min = int ((wholes_per_min / one_beat_mom).main_part_); + return int (beats_per_min); } void -Midi_def::set_tempo( Moment moment, int count_per_minute_i ) +Midi_def::set_tempo (Moment one_beat_mom, int beats_per_minute_i) { - whole_seconds_f_ = Moment( count_per_minute_i ) / Moment( 60 ) / moment; -} + Moment beats_per_second = Moment (beats_per_minute_i) / Moment (60); -void -Midi_def::set_var( String s, Real r ) -{ - real_vars_p_->elem( s ) = r; + Moment m = Moment (1)/Moment (beats_per_second * one_beat_mom); + set_variable (ly_symbol2scm ("whole-in-seconds"), m.smobbed_copy ()); }