X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmidi-def.cc;h=e7c3539f16c7d0c2a2962910bdd62cc7c99bcb07;hb=af978acdd78dce84f3867b80695dc4622fa0cd06;hp=2307155ba826342cee66815480e70d1c063b0bb3;hpb=13e79c0250d34b6bdfbafbc551ef64e8b59b2991;p=lilypond.git diff --git a/lily/midi-def.cc b/lily/midi-def.cc index 2307155ba8..e7c3539f16 100644 --- a/lily/midi-def.cc +++ b/lily/midi-def.cc @@ -1,94 +1,47 @@ /* - midi-def.cc -- implement Midi_def + midi-def.cc -- implement midi output def functions source file of the GNU LilyPond music typesetter - (c) 1997 Jan Nieuwenhuizen - + (c) 1997--2005 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_ = ""; - itrans_p_ = 0; - // ugh - set_tempo (Moment (1, 4), 60 ); -} - -Midi_def::Midi_def (Midi_def const& s) -{ - whole_seconds_f_ = s.whole_seconds_f_; - itrans_p_ = s.itrans_p_ ? new Input_translator (*s.itrans_p_) : 0; - outfile_str_ = s.outfile_str_; -} - -Midi_def::~Midi_def() -{ - delete itrans_p_; -} - -Real -Midi_def::duration_to_seconds_f (Moment mom) -{ - if ( !mom) - return 0; - - return Moment (whole_seconds_f_) * mom; -} +#include -Global_translator* -Midi_def::get_global_translator_p() const -{ - return itrans_p_->get_group_performer_p()->global_l (); -} +#include "misc.hh" +#include "output-def.hh" +#include "moment.hh" +#include "warn.hh" +#include "scm-hash.hh" int -Midi_def::get_tempo_i (Moment moment) +get_tempo (Output_def *def, + Moment one_beat_mom) { - return Moment (whole_seconds_f_) * Moment (60 ) * moment; -} + SCM wis = ly_symbol2scm ("whole-in-seconds"); + Moment *w = unsmob_moment (def->lookup_variable (wis)); -void -Midi_def::print() const -{ -#ifndef NPRINT - DOUT << "Midi {"; - DOUT << "4/min: " << Real (60) / ( whole_seconds_f_ * 4 ); - DOUT << "out: " << outfile_str_; - DOUT << "}\n"; -#endif -} + Moment wholes_per_min = Moment (60); + if (!w) + { + programming_error ("wholes-in-seconds not set."); + wholes_per_min /= 4; + } + else + wholes_per_min /= *w; -void -Midi_def::set (Input_translator* itrans_p) -{ - delete itrans_p_; - itrans_p_ = itrans_p; + 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) +set_tempo (Output_def *def, + 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); + + Moment m = Moment (1) / Moment (beats_per_second * one_beat_mom); + def->set_variable (ly_symbol2scm ("whole-in-seconds"), m.smobbed_copy ()); }