]> git.donarmstrong.com Git - lilypond.git/blob - lily/audio-score.cc
57f012e2332aeee71c6af769d4837bea08c1a293
[lilypond.git] / lily / audio-score.cc
1 /*
2   audio-score.cc -- implement Audio_score
3
4   source file of the GNU LilyPond music typesetter
5
6   (c) 1997 Jan Nieuwenhuizen <jan@digicash.com>
7 */
8
9 #include <time.h>
10 #include "debug.hh"
11 #include "string.hh"
12 #include "string-convert.hh"
13 #include "main.hh"
14 #include "midi-def.hh"
15 #include "midi-item.hh"
16 #include "midi-stream.hh"
17 #include "audio-column.hh"
18 #include "audio-staff.hh"
19 #include "audio-score.hh"
20 #include "score.hh"
21
22 Audio_score::Audio_score (Score* l)
23 {
24     score_l_ = l;
25 }
26
27 void
28 Audio_score::add (Audio_column* p)
29 {
30     p->audio_score_l_ = this;
31     audio_column_p_list_.bottom().add (p);
32 }
33
34 void
35 Audio_score::output (Midi_stream& midi_stream_r)
36 {
37     int tracks_i = audio_staff_l_list_.size() + 1;
38     // ugh
39     int clocks_per_4_i = 384;
40     midi_stream_r << Midi_header (1, tracks_i, clocks_per_4_i);
41     output_header_track (midi_stream_r);
42     int n = 1;
43     for ( PCursor<Audio_staff*> i (audio_staff_l_list_); i.ok(); i++ )
44         i->output (midi_stream_r, n++);
45 }
46
47 void
48 Audio_score::output_header_track (Midi_stream& midi_stream_r)
49 {
50     Midi_track midi_track;
51     
52     time_t t = time (0);
53
54     // perhaps multiple text events?
55     String str = String ("Creator: ") + get_version_str() + "\n";
56
57     Midi_text creator (Midi_text::TEXT, str);
58     midi_track.add (Moment (0), &creator );
59
60     str = "Automatically generated at ";
61     str += ctime (&t);
62     str = str.left_str (str.length_i() - 1);
63     str += "\n";
64     Midi_text generate (Midi_text::TEXT, str);
65     midi_track.add (Moment (0), &generate );
66
67     str = "from musical definition: ";
68
69     str += score_l_->location_str();
70     Midi_text from (Midi_text::TEXT, str);
71     midi_track.add (Moment (0), &from );
72
73     Midi_text track_name (Midi_text::TRACK_NAME, "Track " 
74                           + String_convert::i2dec_str (0, 0, '0') );
75     midi_track.add (Moment (0), &track_name );
76
77     Midi_tempo tempo (score_l_->midi_p_->get_tempo_i (Moment (1, 4) ) );
78     midi_track.add (Moment (0), &tempo);
79
80     midi_stream_r  << midi_track;
81 }
82
83 void
84 Audio_score::add_staff (Audio_staff* l)
85 {
86     audio_staff_l_list_.bottom().add (l);
87 }
88
89 void
90 Audio_score::add (Audio_element *p)
91 {
92     audio_elem_p_list_.bottom().add (p);
93 }
94
95 void
96 Audio_score::print() const
97 {    
98 #ifndef NPRINT
99     DOUT << "Audio_score { ";
100     score_l_->midi_p_->print();
101     DOUT << "\ncolumns: ";
102     for ( PCursor<Audio_column*> i (audio_column_p_list_); i.ok(); i++ )
103         i->print();
104     DOUT << "}\n";
105 #endif 
106 }
107
108 void
109 Audio_score::process()
110 {
111 }
112