@item
MIDI output has been improved
@itemize @bullet
-@item voices are kept separated, which makes the MIDI file much more useful for postprocessing
-@item optimal channel distribution: identical instruments share the same channel. This means that e.g. for a full orchestral score there are always 16 (15 plus percussion) diffently sounding instruments available, unrestricted by the number of staves or voices.
-@item @code{\set Score.midiChannelMapping = #'staff} assigns one MIDI channel per staff, previously the default behavior. This setting is required if you want instrument changes to create MIDI program changes on a single MIDI channel.
+@item the option @code{\set Score.midiChannelMapping = #'voice} puts each voice on its own midi MIDI channel
+@item the option @code{\set Score.midiChannelMapping = #'instrument} puts identical instruments on the same MIDI channel. This means that e.g. for a full orchestral score there are always 16 (15 plus percussion) differently sounding instruments available, unrestricted by the number of staves or voices. (Some MIDI players will cut off notes, however, if two voices play the same pitch simultaneously on the same channel.) This option also stores each voice in a separate track in the MIDI file.
+@item the default, @code{\set Score.midiChannelMapping = #'staff}, assigns one MIDI channel per staff. This setting allows instrument changes (implemented as MIDI program changes) to re-use single MIDI channel.
@item dynamics are now rendered as note velocities, no longer as midi volume. This improves the sound on [high end] midi renderers.
@end itemize
--- /dev/null
+\header {
+
+ texidoc = "A MIDI note-off event precedes a simultaneous note-on event
+for the same pitch in the same MIDI channel, so that all notes are heard.
+Run @code{timidity -idvvv file.midi |grep Midi} to see midi events."
+
+}
+
+\version "2.12.0"
+
+\score {
+ <<
+ \new Staff <<
+ {r4 g' r2 | r2 a'4 r } \\
+ {g'4 r r2 | r2 r4 a' }
+ >>
+ \new Staff { r2 g'2 | a'2 r2 }
+ >>
+ \midi {}
+ \layout {}
+}
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out/initial-key.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out/initial-key.header
\header {
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/option-key.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out-www/option-key.header
\header {
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out/initial-key.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out/initial-key.header
\header {
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
\header {
texidoc="Partcombined music is preserved"
% Lily was here -- automatically converted by out/bin/midi2ly from /home/janneke/testmidi.mid
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
\header {
texidoc="midi2ly @code{--duration-quant} preserves first note length (16)"
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out-www/voice-2.header
\header {
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out-www/voice-2.header
\header {
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/rest.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out-www/rest.header
\header {
-\version "2.13.53"
+\version "2.13.54"
\header {
texidoc="Midi2ly remaps voices correctly to staves in MIDI-files that use instrument<->channel mapping when combined with voice<->track mapping. TODO: pianostaff"
%% TODO:PIANOSTAFF \context PianoStaff <<
<<
\context Staff = "treble" <<
- %% the default
- %% \set Score.midiChannelMapping = #'instrument
+ \set Score.midiChannelMapping = #'instrument
\context Voice="one" \relative c'' {
\time 4/4
\key c \minor
-\version "2.13.53"
+\version "2.13.54"
\header {
texidoc="Midi2ly remaps voices correctly to staves in MIDI-files that use voice<->channel mapping when combined with staff<->track mapping. TODO: pianostaff"
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-2.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out-www/voice-2.header
\header {
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-4.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out-www/voice-4.header
\header {
% Lily was here -- automatically converted by ../../../scripts/midi2ly.py from out-www/voice-4.midi
-\version "2.13.53"
+\version "2.13.54"
\layout {
\context {
\consists "Completion_rest_engraver"
}
}
+\midi {
+ \context {
+ \Score
+ midiChannelMapping = #'instrument
+ }
+}
% included from ./out-www/voice-5.header
\header {
melismaBusyProperties = #default-melisma-properties
instrumentName = #"bright acoustic"
- midiChannelMapping = #'instrument
+ midiChannelMapping = #'staff
%% quarter = 60
tempoWholesPerMinute = #(ly:make-moment 15 1)