From: Jan Nieuwenhuizen Date: Tue, 5 Apr 2011 20:08:34 +0000 (+0200) Subject: MIDI: always output all midi events. Fixes #1593. X-Git-Tag: release/2.13.58-1~5^2^2^2~1 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f114e3c33f9c37c39c7a3fedf66ca5a074785118;p=lilypond.git MIDI: always output all midi events. Fixes #1593. It seemed to be a good trick to not output midi dynamics and use note velocities instead. However, all events are preceeded by delta times so we need every midi event. When we are using note velocities, always output the default midi channel value, which is 100. --- diff --git a/input/regression/midi/rest-dynamic.ly b/input/regression/midi/rest-dynamic.ly new file mode 100644 index 0000000000..299507f17a --- /dev/null +++ b/input/regression/midi/rest-dynamic.ly @@ -0,0 +1,12 @@ +\header { +texidoc="LilyPond respects rests, also when there are dynamics" +options="" +} + +\score { + \new Staff \relative c' { + \time 2/4 e4 e r4 e\f | + } + \layout {} + \midi {} +} diff --git a/lily/midi-chunk.cc b/lily/midi-chunk.cc index 625781dc5a..0aa11eb549 100644 --- a/lily/midi-chunk.cc +++ b/lily/midi-chunk.cc @@ -110,8 +110,6 @@ Midi_event::to_string () const { string delta_string = int2midi_varint_string (delta_ticks_); string midi_string = midi_->to_string (); - if (midi_string.empty ()) - return ""; return delta_string + midi_string; } /**************************************************************** diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 883d1419f0..a04553508f 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -272,9 +272,6 @@ Midi_dynamic::Midi_dynamic (Audio_dynamic *a) string Midi_dynamic::to_string () const { - if (audio_->volume_ < 0 || audio_->silent_) - return ""; - Byte status_byte = (char) (0xB0 + channel_); string str = ::to_string ((char)status_byte); @@ -291,6 +288,10 @@ Midi_dynamic::to_string () const if (volume > full_scale) volume = (int)full_scale; + int const volume_default = 100; + if (audio_->volume_ < 0 || audio_->silent_) + volume = volume_default; + str += ::to_string ((char)0x07); str += ::to_string ((char)volume); return str;