From f114e3c33f9c37c39c7a3fedf66ca5a074785118 Mon Sep 17 00:00:00 2001 From: Jan Nieuwenhuizen Date: Tue, 5 Apr 2011 22:08:34 +0200 Subject: [PATCH] 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. --- input/regression/midi/rest-dynamic.ly | 12 ++++++++++++ lily/midi-chunk.cc | 2 -- lily/midi-item.cc | 7 ++++--- 3 files changed, 16 insertions(+), 5 deletions(-) create mode 100644 input/regression/midi/rest-dynamic.ly 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; -- 2.39.2