[ << Spacing ] | [Top][Contents][Index][ ? ] | [ Templates >> ] | ||
[ < Spacing: Vertically aligning ossias and lyrics ] | [ Up : Top ] | [ MIDI: Changing MIDI output to one channel per voice > ] |
MIDI
[ << MIDI ] | [Top][Contents][Index][ ? ] | [ Templates >> ] | ||
[ < MIDI ] | [ Up : MIDI ] | [ MIDI: Changing the tempo without a metronome mark > ] |
Changing MIDI output to one channel per voice
When outputting MIDI, the default behavior is for each staff to represent one MIDI channel, with all the voices on a staff amalgamated. This minimizes the risk of running out of MIDI channels, since there are only 16 available per track.
However, by moving the Staff_performer
to the Voice
context, each voice on a staff can have its own MIDI channel, as is
demonstrated by the following example: despite being on the same staff,
two MIDI channels are created, each with a different
midiInstrument
.
\score { \new Staff << \new Voice \relative c''' { \set midiInstrument = #"flute" \voiceOne \key g \major \time 2/2 r2 g-"Flute" ~ g fis ~ fis4 g8 fis e2 ~ e4 d8 cis d2 } \new Voice \relative c'' { \set midiInstrument = #"clarinet" \voiceTwo b1-"Clarinet" a2. b8 a g2. fis8 e fis2 r } >> \layout { } \midi { \context { \Staff \remove "Staff_performer" } \context { \Voice \consists "Staff_performer" } \tempo 2 = 72 } }
[ << MIDI ] | [Top][Contents][Index][ ? ] | [ Templates >> ] | ||
[ < MIDI: Changing MIDI output to one channel per voice ] | [ Up : MIDI ] | [ MIDI: Creating custom dynamics in MIDI output > ] |
Changing the tempo without a metronome mark
To change the tempo in MIDI output without printing anything, make the metronome mark invisible.
\score { \new Staff \relative c' { \tempo 4 = 160 c4 e g b c4 b d c \set Score.tempoHideNote = ##t \tempo 4 = 96 d,4 fis a cis d4 cis e d } \layout { } \midi { } }
Creating custom dynamics in MIDI output
The following example shows how to create a dynamic marking, not included in the default list, and assign it a specific value so that it can be used to affect MIDI output.
The dynamic mark \rfz
is assigned a value of 0.9
.
#(define (myDynamics dynamic) (if (equal? dynamic "rfz") 0.9 (default-dynamic-absolute-volume dynamic))) \score { \new Staff { \set Staff.midiInstrument = #"cello" \set Score.dynamicAbsoluteVolumeFunction = #myDynamics \new Voice { \relative { a'4\pp b c-\rfz } } } \layout {} \midi {} }
[ << MIDI ] | [Top][Contents][Index][ ? ] | [ Templates >> ] | ||
[ < MIDI: Creating custom dynamics in MIDI output ] | [ Up : MIDI ] | [ MIDI: Demo MidiInstruments > ] |
Customize drumPitchNames drumStyleTable and drumPitchTable in layout and midi
If you want to use customized drum-pitch-names for an own drum-style with proper output for layout and midi, follow the steps as demonstrated in the code below. In short:
* define the names * define the appearence * tell LilyPond to use it for layout * assign pitches to the names * tell LilyPond to use them for midi
%% This snippet tries to amend %% NR 2.5.1 Common notation for percussion - Custom percussion staves %% http://lilypond.org/doc/v2.18/Documentation/notation/common-notation-for-percussion#custom-percussion-staves %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% %% To use custom drum-pitch-names for your score and midi you need to follow %% this route: %% %%%%%%%%%%%% %% LAYOUT: %%%%%%%%%%%% %% %% (1) Define a name and put it in `drumPitchNames' %% This can be done at toplevel with %% drumPitchNames #'my-name = #'my-name %% or shorter: %% drumPitchNames.my-name = #'my-name %% It's possible to add an alias as well. %% (2) Define how it should be printed %% Therefore put them into a toplevel-list, where each entry should look: %% (my-name %% note-head-style-or-default %% articulation-string-or-#f %% staff-position) %% Example: %% #(define my-style %% '( %% (my-name default "tenuto" -1) %% ; ... %% )) %% (3) Tell LilyPond to use this custom-definitions, with %% drumStyleTable = #(alist->hash-table my-style) %% in a \layout or \with %% %% Now we're done for layout, here a short, but complete example: %% \new DrumStaff %% \with { drumStyleTable = #(alist->hash-table my-style) } %% \drummode { my-name } %% %%%%%%%%%%%% %% MIDI: %%%%%%%%%%%% %% %% (1) Again at toplvel, assign a pitch to your custom-note-name %% midiDrumPitches #'my-name = #(ly:make-pitch -1 4 FLAT) %% or shorter: %% midiDrumPitches.my-name = ges %% Note that you have to use the name, which is in drumPitchNames, no alias %% (2) Tell LilyPond to use this pitch(es), with %% drumPitchTable = #(alist->hash-table midiDrumPitches) %% %% Example: %% \score { %% \new DrumStaff %% \with { %% drumStyleTable = #(alist->hash-table my-style) %% drumPitchTable = #(alist->hash-table midiDrumPitches) %% } %% \drummode { my-name4 } %% \layout {} %% \midi {} %% } %% %%%%%%%%%%%% %% TESTING %%%%%%%%%%%% %% %% To test whether all is fine, run the following sequence in terminal: %% lilypond my-file.ly %% midi2ly my-file.midi %% gedit my-file-midi.ly %% %% Which will do: %% 1. create pdf and midi %% 2. transform the midi back to a .ly-file %% (note: midi2ly is not always good in correctly identifying enharmonic pitches) %% 3. open this file in gedit (or use another editor) %% Now watch what you've got. %% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% FULL EXAMPLE %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% drumPitchNames.dbass = #'dbass drumPitchNames.dba = #'dbass % 'db is in use already drumPitchNames.dbassmute = #'dbassmute drumPitchNames.dbm = #'dbassmute drumPitchNames.do = #'dopen drumPitchNames.dopenmute = #'dopenmute drumPitchNames.dom = #'dopenmute drumPitchNames.dslap = #'dslap drumPitchNames.ds = #'dslap drumPitchNames.dslapmute = #'dslapmute drumPitchNames.dsm = #'dslapmute #(define djembe '((dbass default #f -2) (dbassmute default "stopped" -2) (dopen default #f 0) (dopenmute default "stopped" 0) (dslap default #f 2) (dslapmute default "stopped" 2))) midiDrumPitches.dbass = g midiDrumPitches.dbassmute = fis midiDrumPitches.dopen = a midiDrumPitches.dopenmute = gis midiDrumPitches.dslap = b midiDrumPitches.dslapmute = ais one = \drummode { r4 dba4 do ds r dbm dom dsm } \score { \new DrumStaff \with { \override StaffSymbol.line-count = #3 instrumentName = #"Djembe " drumStyleTable = #(alist->hash-table djembe) drumPitchTable = #(alist->hash-table midiDrumPitches) } \one \layout {} \midi {} }
Demo MidiInstruments
Problem: How to know which midiInstrument
would be best for your
composition? Solution: A LilyPond demo file.
\header { title = "Demo of all midi sounds" arranger = "Myself " } baseMelody = \relative c' { c4.\mf g c16 b' c d e16 d e f g4 g'4 r R1 } melody = { \tempo 4 = 150 \baseMelody } \score { \new Staff << \new Voice \melody >> \layout { } } \score { \new Staff << \new Voice { r\mf \set Staff.midiInstrument = #"acoustic grand" \melody \set Staff.midiInstrument = #"bright acoustic" \melody \set Staff.midiInstrument = #"electric grand" \melody \set Staff.midiInstrument = #"honky-tonk" \melody \set Staff.midiInstrument = #"electric piano 1" \melody \set Staff.midiInstrument = #"electric piano 2" \melody \set Staff.midiInstrument = #"harpsichord" \melody \set Staff.midiInstrument = #"clav" \melody \set Staff.midiInstrument = #"celesta" \melody \set Staff.midiInstrument = #"glockenspiel" \melody \set Staff.midiInstrument = #"music box" \melody \set Staff.midiInstrument = #"vibraphone" \melody \set Staff.midiInstrument = #"marimba" \melody \set Staff.midiInstrument = #"xylophone" \melody \set Staff.midiInstrument = #"tubular bells" \melody \set Staff.midiInstrument = #"dulcimer" \melody \set Staff.midiInstrument = #"drawbar organ" \melody \set Staff.midiInstrument = #"percussive organ" \melody \set Staff.midiInstrument = #"rock organ" \melody \set Staff.midiInstrument = #"church organ" \melody \set Staff.midiInstrument = #"reed organ" \melody \set Staff.midiInstrument = #"accordion" \melody \set Staff.midiInstrument = #"harmonica" \melody \set Staff.midiInstrument = #"concertina" \melody \set Staff.midiInstrument = #"acoustic guitar (nylon)" \melody \set Staff.midiInstrument = #"acoustic guitar (steel)" \melody \set Staff.midiInstrument = #"electric guitar (jazz)" \melody \set Staff.midiInstrument = #"electric guitar (clean)" \melody \set Staff.midiInstrument = #"electric guitar (muted)" \melody \set Staff.midiInstrument = #"overdriven guitar" \melody \set Staff.midiInstrument = #"distorted guitar" \melody \set Staff.midiInstrument = #"acoustic bass" \melody \set Staff.midiInstrument = #"electric bass (finger)" \melody \set Staff.midiInstrument = #"electric bass (pick)" \melody \set Staff.midiInstrument = #"fretless bass" \melody \set Staff.midiInstrument = #"slap bass 1" \melody \set Staff.midiInstrument = #"slap bass 2" \melody \set Staff.midiInstrument = #"synth bass 1" \melody \set Staff.midiInstrument = #"synth bass 2" \melody \set Staff.midiInstrument = #"violin" \melody \set Staff.midiInstrument = #"viola" \melody \set Staff.midiInstrument = #"cello" \melody \set Staff.midiInstrument = #"contrabass" \melody \set Staff.midiInstrument = #"tremolo strings" \melody \set Staff.midiInstrument = #"pizzicato strings" \melody \set Staff.midiInstrument = #"orchestral harp" \melody \set Staff.midiInstrument = #"timpani" \melody \set Staff.midiInstrument = #"string ensemble 1" \melody \set Staff.midiInstrument = #"string ensemble 2" \melody \set Staff.midiInstrument = #"synthstrings 1" \melody \set Staff.midiInstrument = #"synthstrings 2" \melody \set Staff.midiInstrument = #"choir aahs" \melody \set Staff.midiInstrument = #"voice oohs" \melody \set Staff.midiInstrument = #"synth voice" \melody \set Staff.midiInstrument = #"orchestra hit" \melody \set Staff.midiInstrument = #"trumpet" \melody \set Staff.midiInstrument = #"trombone" \melody \set Staff.midiInstrument = #"tuba" \melody \set Staff.midiInstrument = #"muted trumpet" \melody \set Staff.midiInstrument = #"french horn" \melody \set Staff.midiInstrument = #"brass section" \melody \set Staff.midiInstrument = #"synthbrass 1" \melody \set Staff.midiInstrument = #"synthbrass 2" \melody \set Staff.midiInstrument = #"soprano sax" \melody \set Staff.midiInstrument = #"alto sax" \melody \set Staff.midiInstrument = #"tenor sax" \melody \set Staff.midiInstrument = #"baritone sax" \melody \set Staff.midiInstrument = #"oboe" \melody \set Staff.midiInstrument = #"english horn" \melody \set Staff.midiInstrument = #"bassoon" \melody \set Staff.midiInstrument = #"clarinet" \melody \set Staff.midiInstrument = #"piccolo" \melody \set Staff.midiInstrument = #"flute" \melody \set Staff.midiInstrument = #"recorder" \melody \set Staff.midiInstrument = #"pan flute" \melody \set Staff.midiInstrument = #"blown bottle" \melody \set Staff.midiInstrument = #"shakuhachi" \melody \set Staff.midiInstrument = #"whistle" \melody \set Staff.midiInstrument = #"ocarina" \melody \set Staff.midiInstrument = #"lead 1 (square)" \melody \set Staff.midiInstrument = #"lead 2 (sawtooth)" \melody \set Staff.midiInstrument = #"lead 3 (calliope)" \melody \set Staff.midiInstrument = #"lead 4 (chiff)" \melody \set Staff.midiInstrument = #"lead 5 (charang)" \melody \set Staff.midiInstrument = #"lead 6 (voice)" \melody \set Staff.midiInstrument = #"lead 7 (fifths)" \melody \set Staff.midiInstrument = #"lead 8 (bass+lead)" \melody \set Staff.midiInstrument = #"pad 1 (new age)" \melody \set Staff.midiInstrument = #"pad 2 (warm)" \melody \set Staff.midiInstrument = #"pad 3 (polysynth)" \melody \set Staff.midiInstrument = #"pad 4 (choir)" \melody \set Staff.midiInstrument = #"pad 5 (bowed)" \melody \set Staff.midiInstrument = #"pad 6 (metallic)" \melody \set Staff.midiInstrument = #"pad 7 (halo)" \melody \set Staff.midiInstrument = #"pad 8 (sweep)" \melody \set Staff.midiInstrument = #"fx 1 (rain)" \melody \set Staff.midiInstrument = #"fx 2 (soundtrack)" \melody \set Staff.midiInstrument = #"fx 3 (crystal)" \melody \set Staff.midiInstrument = #"fx 4 (atmosphere)" \melody \set Staff.midiInstrument = #"fx 5 (brightness)" \melody \set Staff.midiInstrument = #"fx 6 (goblins)" \melody \set Staff.midiInstrument = #"fx 7 (echoes)" \melody \set Staff.midiInstrument = #"fx 8 (sci-fi)" \melody \set Staff.midiInstrument = #"sitar" \melody \set Staff.midiInstrument = #"banjo" \melody \set Staff.midiInstrument = #"shamisen" \melody \set Staff.midiInstrument = #"koto" \melody \set Staff.midiInstrument = #"kalimba" \melody \set Staff.midiInstrument = #"bagpipe" \melody \set Staff.midiInstrument = #"fiddle" \melody \set Staff.midiInstrument = #"shanai" \melody \set Staff.midiInstrument = #"tinkle bell" \melody \set Staff.midiInstrument = #"agogo" \melody \set Staff.midiInstrument = #"steel drums" \melody \set Staff.midiInstrument = #"woodblock" \melody \set Staff.midiInstrument = #"taiko drum" \melody \set Staff.midiInstrument = #"melodic tom" \melody \set Staff.midiInstrument = #"synth drum" \melody \set Staff.midiInstrument = #"reverse cymbal" \melody \set Staff.midiInstrument = #"guitar fret noise" \melody \set Staff.midiInstrument = #"breath noise" \melody \set Staff.midiInstrument = #"seashore" \melody \set Staff.midiInstrument = #"bird tweet" \melody \set Staff.midiInstrument = #"telephone ring" \melody \set Staff.midiInstrument = #"helicopter" \melody \set Staff.midiInstrument = #"applause" \melody \set Staff.midiInstrument = #"gunshot" \melody } >> \midi { } }
[ << MIDI ] | [Top][Contents][Index][ ? ] | [ Templates >> ] | ||
[ < MIDI: Demo MidiInstruments ] | [ Up : MIDI ] | [ Templates > ] |
Replacing default MIDI instrument equalization
The default MIDI instrument equalizer can be replaced by
setting the instrumentEqualizer
property in the Score
context to a user-defined Scheme procedure that uses a MIDI instrument
name as its argument along with a pair of fractions indicating the
minimum and maximum volumes respectively to be applied to that
specific instrument.
The following example sets the minimum and maximum volumes for flute and clarinet respectively.
#(define my-instrument-equalizer-alist '()) #(set! my-instrument-equalizer-alist (append '( ("flute" . (0.7 . 0.9)) ("clarinet" . (0.3 . 0.6))) my-instrument-equalizer-alist)) #(define (my-instrument-equalizer s) (let ((entry (assoc s my-instrument-equalizer-alist))) (if entry (cdr entry)))) \score { << \new Staff { \key g \major \time 2/2 \set Score.instrumentEqualizer = #my-instrument-equalizer \set Staff.midiInstrument = #"flute" \new Voice \relative { r2 g''\mp g fis~ 4 g8 fis e2~ 4 d8 cis d2 } } \new Staff { \key g \major \set Staff.midiInstrument = #"clarinet" \new Voice \relative { b'1\p a2. b8 a g2. fis8 e fis2 r } } >> \layout { } \midi { } }
[ << MIDI ] | [Top][Contents][Index][ ? ] | [ Templates >> ] | ||
[ < MIDI: Demo MidiInstruments ] | [ Up : MIDI ] | [ Templates > ] |