]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-walker.hh
release: 0.0.72pre
[lilypond.git] / lily / include / midi-walker.hh
1 /*
2   midi-walker.hh -- declare Midi_walker
3
4   (c) 1996,97 Han-Wen Nienhuys, Jan Nieuwenhuizen <jan@digicash.com>
5   */
6
7 #ifndef MIDIWALKER_HH
8 #define MIDIWALKER_HH
9
10
11 #include "lily-proto.hh"
12
13 #if 0
14
15 /* 
16    sketch. . .
17
18    It would be totally cool to share code with the Engraver hierarchy,
19    but this is very tough i think.
20    
21    */
22 class Performer {
23     Performer_group_performer * daddy_perf_l_;
24     
25     virtual bool try_request(Request*r)
26     {
27         return daddy_perf_l_->try_request(r);
28     }
29     virtual void play_event( Midi_item i ) { daddy_perf_l_->play_event (i ); }
30 };
31
32 class Performer_group_performer : public Performer, public Translator {
33     Pointer_list<Performer*> perf_p_list_;
34     
35     Link_array<Performer_group_performer> group_l_arr_;
36     Link_array<Performer> nongroup_l_arr_;
37     
38     bool try_request(Request*r)
39     {
40          bool hebbes_b =false;
41          for (int i =0; !hebbes_b && i < nongroup_l_arr_.size() ; i++)
42              hebbes_b =nongroup_l_arr_[i]->try_request(req_l);
43          if (!hebbes_b)
44              hebbes_b = daddy_grav_l_->try_request(req_l);
45          return hebbes_b ;
46     }
47     
48 };
49
50 class Staff_performer : public Performer_group_performer 
51 {
52     int midi_track_i_;
53     String instrument_str() { 
54         return Translator::id_str_; 
55     }
56     virtual void play_event ( Midi_item i)
57     {
58         i.track_i_ = midi_track_i_;
59         Performer::play_event(i);
60     }
61 };
62
63 class Voice_performer_group_performer : public Performer_group_performer {
64
65 };
66
67 class Note_performer : public Performer {
68     Melodic_req * current_l_;
69     Moment switch_off_at_,switch_on_at_;
70
71
72     virtual void process_request() {
73         if (when() == switch_off_at_ )
74             play_event( Note_event(current_l_->pitch()  ))
75 };
76
77 class Voice_performer : 
78         public Performer_group_performer, public Interpreter 
79 {
80     
81 };
82
83 class Score_performer: 
84     public Performer_group_performer, public Global_translator 
85 {
86     Midi_file * file_p_;
87     Moment prev_;
88     virtual void play_event(Midi_item i)
89     {
90         file_p_->output (i);
91     }
92     virtual void prepare(Moment m){
93         file_p_->move ( m -prev_ );
94     }
95 };
96
97 #endif
98
99 #endif // MIDIWALKER_HH
100
101