]> git.donarmstrong.com Git - lilypond.git/blob - mi2mu/midi-score.cc
62cc98910fd2453d5a68250336fb70921b55cb95
[lilypond.git] / mi2mu / midi-score.cc
1 //
2 // midi-score.cc -- implement Midi_score
3 //
4 // copyright 1997 Jan Nieuwenhuizen <jan@digicash.com>
5
6 #include "mi2mu.hh"
7
8 Midi_score::Midi_score( int format_i, int tracks_i, int tempo_i )
9 {
10         format_i_ = format_i;
11         tracks_i_ = tracks_i;
12         tempo_i_ = tempo_i;
13 }
14
15 Midi_score::~Midi_score()
16 {
17 }
18
19 void
20 Midi_score::add_track( Midi_track* midi_track_p )
21 {
22         midi_track_p_list_.bottom().add( midi_track_p );
23 }
24
25 int
26 Midi_score::output_mudela( String filename_str )
27 {
28         tor( NORMAL_ver ) << "Lily output to " << filename_str << " ..." << endl;
29         
30         // ugh, ugly midi type 1 fix
31         if ( ( midi_track_p_list_.size() == 1 ) && !midi_track_p_list_.top()->number_i_ )
32                 midi_track_p_list_.top()->number_i_ = 1;
33
34         int track_i = 0;
35         Lily_stream lily_stream( filename_str );
36         for ( PCursor<Midi_track*> i( midi_track_p_list_.top() ); i.ok(); i++ ) {
37                 tor( NORMAL_ver ) << "track " << track_i++ << ": " << flush;
38                 i->output_mudela( lily_stream );
39                 lily_stream.newline();
40                 tor( NORMAL_ver ) << endl;
41         }
42
43         lily_stream << "\\score{";
44         lily_stream.indent();
45                 lily_stream << " < \\multi 3;";
46                 lily_stream.indent();
47                         for ( PCursor<Midi_track*> i( midi_track_p_list_.top() ); i.ok(); i++ ) {
48                                 if ( ( midi_track_p_list_.size() != 1 ) 
49                                         && ( i == midi_track_p_list_.top() ) )
50                                         continue;
51                                 lily_stream << "\\melodic{ ";
52                                 lily_stream << "\\$" << i->name_str();
53                                 lily_stream << " }";
54                                 lily_stream.newline();
55                         }
56                         lily_stream.tnedni();
57                         lily_stream << ">";
58                 lily_stream.newline();
59                 lily_stream << "\\paper{";
60                         lily_stream.indent();
61                         lily_stream << "unitspace = 20.0\\mm;";
62                         lily_stream.tnedni();
63                 lily_stream << "}";
64                 lily_stream.newline();
65                 lily_stream << "\\midi{";
66                         lily_stream.indent();
67                         // not use silly 0 track
68                         midi_track_p_list_.bottom()->midi_tempo_p_->output_mudela( lily_stream, true );
69                         lily_stream.tnedni();
70                 lily_stream << "}";
71                 lily_stream.tnedni();
72
73         lily_stream << "}";
74         lily_stream.newline();
75
76         return 0;
77 }
78
79 void
80 Midi_score::process()
81 {
82         int track_i = 0;
83         for ( PCursor<Midi_track*> i( midi_track_p_list_.top() ); i.ok(); i++ )  {
84                 tor( NORMAL_ver ) << "track " << track_i++ << ": " << flush;
85                 i->process();
86                 tor( NORMAL_ver ) << endl;
87         }
88 }
89