X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fmidi-walker.cc;h=d9765c681450931fe85acca5c81213a90a153001;hb=77267b700c377fd170abcbf4863728937038eb5e;hp=b97630b0d147ed8ebc05d63c111b8928c3667cad;hpb=c50f0610edaefaadfdffaf2dea07b2fb3af77918;p=lilypond.git diff --git a/lily/midi-walker.cc b/lily/midi-walker.cc index b97630b0d1..d9765c6814 100644 --- a/lily/midi-walker.cc +++ b/lily/midi-walker.cc @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1997--2012 Han-Wen Nienhuys + Copyright (C) 1997--2015 Han-Wen Nienhuys Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify @@ -52,13 +52,15 @@ audio_item_less (Audio_item *const a, return a->get_column ()->when_ < b->get_column ()->when_; } -Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track) +Midi_walker::Midi_walker (Audio_staff *audio_staff, Midi_track *track, int start_tick) { track_ = track; index_ = 0; items_ = audio_staff->audio_items_; vector_sort (items_, audio_item_less); - last_tick_ = 0; + //Scores that begin with grace notes start at negative times. This + //is OK - MIDI output doesn't use absolute ticks, only differences. + last_tick_ = start_tick; percussion_ = audio_staff->percussion_; merge_unisons_ = audio_staff->merge_unisons_; } @@ -87,8 +89,9 @@ Midi_walker::do_start_note (Midi_note *note) Real (384 * 4)) + now_ticks; for (vsize i = 0; i < stop_note_queue.size (); i++) { - /* if this pitch already in queue */ - if (stop_note_queue[i].val->get_semitone_pitch () + /* if this pitch already in queue, and is not already ignored */ + if (!stop_note_queue[i].ignore_ && + stop_note_queue[i].val->get_semitone_pitch () == note->get_semitone_pitch ()) { int queued_ticks