]> git.donarmstrong.com Git - lilypond.git/blob - lily/include/midi-walker.hh
Run grand-replace (issue 3765)
[lilypond.git] / lily / include / midi-walker.hh
1 /*
2   This file is part of LilyPond, the GNU music typesetter.
3
4   Copyright (C) 1996--2014 Han-Wen Nienhuys  <hanwen@xs4all.nl>
5   Jan Nieuwenhuizen <janneke@gnu.org>
6
7   LilyPond is free software: you can redistribute it and/or modify
8   it under the terms of the GNU General Public License as published by
9   the Free Software Foundation, either version 3 of the License, or
10   (at your option) any later version.
11
12   LilyPond is distributed in the hope that it will be useful,
13   but WITHOUT ANY WARRANTY; without even the implied warranty of
14   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15   GNU General Public License for more details.
16
17   You should have received a copy of the GNU General Public License
18   along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
19 */
20
21 #ifndef MIDI_WALKER_HH
22 #define MIDI_WALKER_HH
23
24 #include "pqueue.hh"
25 #include "lily-proto.hh"
26 #include "moment.hh"
27
28 struct Midi_note_event : PQueue_ent<int, Midi_note *>
29 {
30   bool ignore_;
31   Midi_note_event ();
32 };
33
34 int compare (Midi_note_event const &left, Midi_note_event const &right);
35
36 /**
37    walk audio and output midi
38 */
39 class Midi_walker
40 {
41 public:
42   Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track);
43   ~Midi_walker ();
44
45   void process ();
46   void operator ++(int);
47   bool ok () const;
48   void finalize ();
49
50 private:
51   void do_start_note (Midi_note *note);
52   void do_stop_notes (int);
53   void output_event (int, Midi_item *l);
54   Midi_item *get_midi (Audio_item *);
55   Midi_track *track_;
56   bool percussion_;
57   bool merge_unisons_;
58   vsize index_;
59   vector<Audio_item *> items_;
60   PQueue<Midi_note_event> stop_note_queue;
61   int last_tick_;
62
63   vector<Midi_item *> midi_events_;
64 };
65
66 #endif // MIDI_WALKER_HH