X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Fmidi-walker.hh;h=f23b7407e89aa8e59f05ff76fe3d307389e8e438;hb=47db9a3883d726ca53e2133a3b2298f78dd6a32e;hp=96005c8931a460363a0f1d5abaf7653f4e7aec6d;hpb=036af34aa44a151b9e67c18e0acccaafdfae9de8;p=lilypond.git diff --git a/lily/include/midi-walker.hh b/lily/include/midi-walker.hh index 96005c8931..f23b7407e8 100644 --- a/lily/include/midi-walker.hh +++ b/lily/include/midi-walker.hh @@ -1,55 +1,66 @@ /* - midi-walker.hh -- declare Midi_walker + This file is part of LilyPond, the GNU music typesetter. - (c) 1996,97 Han-Wen Nienhuys, Jan Nieuwenhuizen - */ + Copyright (C) 1996--2015 Han-Wen Nienhuys + Jan Nieuwenhuizen -#ifndef MIDIWALKER_HH -#define MIDIWALKER_HH + LilyPond is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. -#if 0 -#include "lily-proto.hh" -#include "grouping.hh" -#include "staff-walker.hh" -#include "pcursor.hh" -#include "pqueue.hh" + LilyPond is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with LilyPond. If not, see . +*/ +#ifndef MIDI_WALKER_HH +#define MIDI_WALKER_HH + +#include "pqueue.hh" +#include "lily-proto.hh" +#include "moment.hh" -struct Note_event : PQueue_ent +struct Midi_note_event : PQueue_ent { - bool ignore_b_; - Note_event() { - ignore_b_ = false; - } + bool ignore_; + Midi_note_event (); }; -int compare(Note_event const&, Note_event const&); +int compare (Midi_note_event const &left, Midi_note_event const &right); /** - a simple walker which collects midi stuff, and then outputs. - - Should derive from Staff_walker - */ -class Midi_walker : public PCursor + walk audio and output midi +*/ +class Midi_walker { - Midi_track *track_l_; - - PQueue< Note_event > stop_notes; - - Moment last_moment_; - - /* *************** */ - void do_stop_notes(Moment); - void do_start_note(Note_req *note_l); - void output_event(Midi_item&, Moment); public: - - Midi_walker(Staff*, Midi_track*); - void do_process_requests(); - ~Midi_walker(); -}; -#endif + Midi_walker (Audio_staff *audio_staff, Midi_track *midi_track, int start_tick); + ~Midi_walker (); + + void process (); + void operator ++(int); + bool ok () const; + void finalize (); -#endif // MIDIWALKER_HH +private: + void do_start_note (Midi_note *note); + void do_stop_notes (int); + void output_event (int, Midi_item *l); + Midi_item *get_midi (Audio_item *); + Midi_track *track_; + bool percussion_; + bool merge_unisons_; + vsize index_; + vector items_; + PQueue stop_note_queue; + int last_tick_; + vector midi_events_; +}; +#endif // MIDI_WALKER_HH