2 midioutput.cc -- implement Midi_output
4 source file of the LilyPond music typesetter
6 (c) 1997 Han-Wen Nienhuys <hanwen@stack.nl>, Jan Nieuwenhuizen <jan@digicash.com>
15 #include "string-convert.hh"
20 #include "midi-stream.hh"
21 #include "midi-def.hh"
22 #include "midi-output.hh"
23 #include "midi-walker.hh"
24 #include "midi-item.hh"
25 #include "staff-column.hh"
26 #include "musicalrequest.hh"
29 Midi_output::Midi_output(Score* score_l, Midi_def* midi_l )
34 Midi_stream midi_stream(midi_l->outfile_str_,
35 // don-t forget: extra track 0 for tempo/copyright stuff...
36 score_l_->staffs_.size() + 1,
38 midi_stream_l_ = &midi_stream;
45 Midi_output::do_staff(Staff*st_l,int track_i)
47 Midi_track midi_track( track_i );
50 Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( track_i, 0, '0' ) );
51 midi_track.add( Moment( 0.0 ), &track_name );
54 Midi_text instrument_name( Midi_text::INSTRUMENT_NAME, "piano" );
55 midi_track.add( Moment( 0.0 ), &instrument_name );
57 // set key, help, where to get key, where to get major/minor?
58 int accidentals_i = 0;
61 // uph, sorry, wanna test this...
63 if ( ( infile_str_g.index_i( "scsii-menuetto" ) >= 0 )
64 || ( infile_str_g.index_i( "standchen" ) >= 0 )
65 || ( infile_str_g.left_str( 1 ) == String( "s" ) ) )
68 if ( ( infile_str_g.index_i( "standchen" ) >= 0 ) )
71 Midi_key midi_key( accidentals_i, minor_i );
72 midi_track.add( Moment( 0.0 ), &midi_key );
74 Midi_tempo midi_tempo( midi_l_->get_tempo_i( Moment( 1, 4 ) ) );
75 midi_track.add( Moment( 0.0 ), &midi_tempo );
77 for (Midi_walker w (st_l, &midi_track); w.ok(); w++)
80 *midi_stream_l_ << midi_track;
86 Midi_track midi_track( 0 );
90 // perhaps multiple text events?
91 String str = String( "Creator: " ) + get_version() + "\n";
92 str += "Generated, at ";
94 str += ", from musical definition: " + infile_str_g;
97 Midi_text creator( Midi_text::TEXT, str );
98 midi_track.add( Moment( 0.0 ), &creator );
100 struct tm* tm_l = gmtime( &t );
101 String year_str = String_convert::i2dec_str( 1900 + tm_l->tm_year, 4, '0' );
103 // your copyleft here
104 str = " Copyleft (o) " + year_str;
105 str += " Han-Wen Nienhuys <hanwen@stack.nl>, "
106 " Jan Nieuwenhuizen <jan@digicash.com>\n";
108 Midi_text copyleft( Midi_text::COPYRIGHT, str );
109 midi_track.add( Moment( 0.0 ), ©left );
110 *midi_stream_l_ << midi_track;
114 Midi_output::staffs()
117 for (iter_top(score_l_->staffs_,i); i.ok(); i++)
118 do_staff(i, track_i++);