]> git.donarmstrong.com Git - lilypond.git/blob - lily/staff-performer.cc
patch::: 0.0.75.jcn4: midi op
[lilypond.git] / lily / staff-performer.cc
1 /*
2   staff-performer.cc -- implement Staff_performer
3
4   (c) 1996, 1997 Jan Nieuwenhuizen <jan@digicash.com>
5  */
6
7
8 #include "staff-performer.hh"
9 #include "translator.hh"
10 #include "input-translator.hh"
11 #include "debug.hh"
12 #include "midi-def.hh"
13 #include "midi-item.hh"
14 #include "midi-stream.hh"
15 #include "string.hh"
16 #include "string-convert.hh"
17
18 IMPLEMENT_STATIC_NAME(Staff_performer);
19 IMPLEMENT_IS_TYPE_B1(Staff_performer,Performer_group_performer);
20 ADD_THIS_PERFORMER(Staff_performer);
21
22 Staff_performer::Staff_performer()
23 {
24     midi_mom_ = 0;
25     track_i_ = 0;
26     midi_track_p_ = 0;
27 }
28
29 Staff_performer::~Staff_performer()
30 {
31      delete midi_track_p_;
32 }
33
34 void
35 Staff_performer::header()
36 {
37     // set track name
38     Midi_text track_name( Midi_text::TRACK_NAME, "Track " + String_convert::i2dec_str( track_i_, 0, '0' ) );
39     midi_track_p_->add( Moment( 0 ), &track_name );
40
41     // set instrument :-)
42     Midi_text instrument_name( Midi_text::INSTRUMENT_NAME, instrument_str() );
43     midi_track_p_->add( Moment( 0 ), &instrument_name );
44
45     Midi_tempo midi_tempo( midi_l_->get_tempo_i( Moment( 1, 4 ) ) );
46     midi_track_p_->add( Moment( 0 ), &midi_tempo );
47 }
48
49 String 
50 Staff_performer::instrument_str() 
51
52     return Translator::id_str_; 
53 }
54
55 void
56 Staff_performer::midi_output( Midi_stream* midi_stream_l )
57 {
58     *mlog << "[" << track_i_ << "]";
59     *midi_stream_l << *midi_track_p_;
60 }
61
62 void 
63 Staff_performer::play_event( Midi_item* l )
64 {
65     Moment mom = get_mom();
66     Moment delta_t = mom - midi_mom_ ;
67     midi_mom_ += delta_t;
68     midi_track_p_->add( delta_t, l );    
69 }
70
71 void
72 Staff_performer::set_track( Midi_def* midi_l, int& track_i_r ) 
73
74     midi_l_ = midi_l;
75     track_i_ = track_i_r++;
76     midi_track_p_ = new Midi_track( track_i_ );
77     header();
78 }
79