]> git.donarmstrong.com Git - lilypond.git/blob - lily/audio-score.cc
release: 0.1.7
[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     mtor << "Audio_score { ";
100     score_l_->midi_p_->print();
101     mtor << "\ncolumns: ";
102     for ( PCursor<Audio_column*> i( audio_column_p_list_ ); i.ok(); i++ )
103         i->print();
104     mtor << "}\n";
105 #endif 
106 }
107
108 void
109 Audio_score::process()
110 {
111 }
112