mirror of https://github.com/kastdeur/lilydrum.git
Compare commits
5 Commits
04633ac833
...
bafcc6ef6f
Author | SHA1 | Date |
---|---|---|
Eric Teunis de Boone | bafcc6ef6f | |
Eric Teunis de Boone | 3b3844d7cb | |
Eric Teunis de Boone | a627bafd2a | |
Eric Teunis de Boone | 5440780bb0 | |
Eric Teunis de Boone | 50da682fb6 |
64
README.md
64
README.md
|
@ -1,19 +1,25 @@
|
|||
# Lilydrum (pipeband-drumming notation)
|
||||
|
||||
Somehow, the drums part in lilypond does not cover a notation with only right and left hands
|
||||
(also known as Swiss style drum notation).
|
||||
That is, right is above the line and left is below it.
|
||||
In the same manner as the bagpipe.ly file included with lilypond, flams and drags are defined as a shortcut.
|
||||
[Lilypond](http://lilypond.org) does not cover drum notation for pipebands out of the box.
|
||||
That is, right is above the line and left is below it. \
|
||||
In the same manner as the bagpipe.ly file included with Lilypond, this library allows to easily use this notation with opt-in elements.
|
||||
See the [cheatsheet](./cheatsheet.pdf) ([ly](./cheatsheet.ly), [pdf](./cheatsheet.pdf)) for a handful of definitions.
|
||||
|
||||
There has been such a lilypond include file earlier, made by Simon Froger
|
||||
(which includes all of the above).
|
||||
This repository builds on work.
|
||||
The original file can still be found at [http://lsr.di.unimi.it/LSR/Snippet?id=970](http://lsr.di.unimi.it/LSR/Snippet?id=970).
|
||||
![preview of the score](./example.preview.png) \
|
||||
*(see [./example.ly](./example.ly) for fully annotated code and its [score](./example.pdf))*
|
||||
|
||||
There has been such a Lilypond include file earlier, made by Simon Froger. This repository builds on his work.
|
||||
The ~~original~~ (updated) file can be found at [http://lsr.di.unimi.it/LSR/Snippet?id=970](http://lsr.di.unimi.it/LSR/Snippet?id=970).
|
||||
|
||||
[His website (French) can be found here](https://simonfroger.wordpress.com/lilypond/caisse-claire-ecossaise/)
|
||||
|
||||
This repository has also been converted into a [lyp](https://github.com/noteflakes/lyp) package: [lyp/lilydrum](https://github.com/lyp-packages/lilydrum).
|
||||
|
||||
*shameless plug:* \
|
||||
An example of scores typeset with this library can be found in
|
||||
[kastdeur/pipeband-music](https://github.com/kastdeur/pipeband-music)
|
||||
or
|
||||
[on my website (pdf)](https://deboone.nl/scores/pipeband).
|
||||
|
||||
## How to use
|
||||
Add the following line to include the definitions for use in your document:
|
||||
|
@ -53,48 +59,6 @@ To make a pipeband drumstaff (a `DrumStaff` with a few specific changes) you can
|
|||
*You do not need to use PipeBandDrumStaff to use the music definitions.*
|
||||
|
||||
|
||||
## Example piece
|
||||
*(see [./example.ly](./example.ly) for fully annotated code and its [score](./example.pdf))*
|
||||
|
||||
![preview of the score](./example.preview.png)
|
||||
|
||||
|
||||
This was generated by the following code.
|
||||
|
||||
```lilypond
|
||||
\include "lilydrum.ly"
|
||||
|
||||
\header { title = "Standards 6/8" }
|
||||
\score {
|
||||
\new PipeBandDrumStaff {
|
||||
\drummode {
|
||||
\time 6/8
|
||||
\repeat volta 2 {
|
||||
\partial 8 d8:32( |
|
||||
g8.)[ g16 \drag d8] d8.[ d16 \drag g8] |
|
||||
g8.[ \drag d16 d8] d8.[ d16 \drag g8] |
|
||||
|
||||
\tutti {
|
||||
\flam d8. d16 g8 d4.:32( |
|
||||
d8.) g16 d8 \flam g4
|
||||
}
|
||||
|
||||
d8:32( |
|
||||
g8.)[ g16 \drag d8] d8.[ d16 \drag g8] |
|
||||
g8.[ \drag d16 d8] d8.[ d16 \drag g8] |
|
||||
|
||||
|
||||
\tutti{
|
||||
\flam d8. d16:64( d8) \flam d8. d16 \flam g8 |
|
||||
d8.:32( d16) \flam g8 \flam d4
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
### Embellishments (Side Drum)
|
||||
Flams and Drags can be added using `\flam` and `\drag`.
|
||||
They can determine whether to be left or right by themselves for simple expressions.
|
||||
|
|
16
lilydrum.ly
16
lilydrum.ly
|
@ -6,7 +6,7 @@
|
|||
|
||||
This file builds on work done by Simon Froger.
|
||||
|
||||
Substantial changes by ET de Boone, Seaforth Highlanders of Holland (seaforth.nl)
|
||||
Substantial changes by ET de Boone (https://etdeboone.nl)
|
||||
Include by using :
|
||||
\include "[pathtothisfile]" e.g. "~/lilydrum.ly"
|
||||
|
||||
|
@ -26,10 +26,10 @@
|
|||
|
||||
#(ly:set-option 'relative-includes #t)
|
||||
|
||||
\include "lib/layout_tweaks.ily"
|
||||
\include "lib/musical_functions.ily"
|
||||
\include "lib/embellishments.ily"
|
||||
\include "lib/flourishing.ily"
|
||||
\include "lib/special_sticking.ily"
|
||||
\include "lib/rehearsal_marks.ily"
|
||||
\include "lib/midi.ily"
|
||||
\include "lilydrum/layout_tweaks.ily"
|
||||
\include "lilydrum/musical_functions.ily"
|
||||
\include "lilydrum/embellishments.ily"
|
||||
\include "lilydrum/flourishing.ily"
|
||||
\include "lilydrum/special_sticking.ily"
|
||||
\include "lilydrum/rehearsal_marks.ily"
|
||||
\include "lilydrum/midi.ily"
|
||||
|
|
|
@ -8,8 +8,8 @@ drumgrace = #(define-music-function (parser location notes ) ( ly:music? ) #{
|
|||
\once \override Beam.positions = #'(2 . 2)
|
||||
\once \override DrumStaff.Stem.length = #5
|
||||
\override Flag.stroke-style = #"grace"
|
||||
\override Score.GraceSpacing #'spacing-increment = #0
|
||||
\override Score.Stem #'beamlet-max-length-proportion = #'(0.5 . 0.5)
|
||||
\override Score.GraceSpacing.spacing-increment = #0
|
||||
\override Score.Stem.beamlet-max-length-proportion = #'(0.5 . 0.5)
|
||||
|
||||
% Print notes
|
||||
% Grace note timing is scaled, so they do not wander off too
|
||||
|
@ -18,7 +18,7 @@ drumgrace = #(define-music-function (parser location notes ) ( ly:music? ) #{
|
|||
\times 1/4 { \grace $notes }
|
||||
|
||||
% Revert back
|
||||
\revert Score.Stem #'beamlet-default-length
|
||||
\revert Score.Stem.beamlet-default-length
|
||||
\revert Flag.stroke-style
|
||||
\stemNeutral
|
||||
#})
|
||||
|
@ -42,10 +42,10 @@ dragddr = \drummode { \drumgrace { g16[\dr g] } } % Drag right with start repea
|
|||
draggdr = \drummode { \drumgrace { d16[\dr d] } } % Drag left with start repeat
|
||||
|
||||
% Open Drags
|
||||
odragd = \drummode { \drumgrace { << { g16[ g] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag right
|
||||
odragg = \drummode { \drumgrace { << { d16[ d] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag left
|
||||
odragddr = \drummode { \drumgrace { << { d16[\dr d] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag right with start repeat
|
||||
odraggdr = \drummode { \drumgrace { << { g16[\dr g] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag left with start repeat
|
||||
odragd = \drummode { \drumgrace { << { g16[ g] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag right
|
||||
odragg = \drummode { \drumgrace { << { d16[ d] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag left
|
||||
odragddr = \drummode { \drumgrace { << { d16[\dr d] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag right with start repeat
|
||||
odraggdr = \drummode { \drumgrace { << { g16[\dr g] } { s16 s32^\markup { \musicglyph #"scripts.open" } } >> } } % Open Drag left with start repeat
|
||||
|
||||
% Ruff
|
||||
ruffg = \drummode { \drumgrace { d16[ g d] } } % Ruff right
|
||||
|
@ -63,18 +63,12 @@ sruffddr = \drummode { \drumgrace { d16[\dr g g] } } % Swiss Ruff left with sta
|
|||
%% Embellishment functions, automatic left or right %%
|
||||
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
||||
|
||||
get-first-note = #(define-music-function (music) (ly:music?)
|
||||
"Get the first note-event in @var{music}"
|
||||
(let ((note (car (extract-typed-music music 'note-event))))
|
||||
note
|
||||
)
|
||||
)
|
||||
|
||||
#(define (autohandFunc left right)
|
||||
"Return a music function that prepends @var{left} if the first next note-event is of type 'left-hand,
|
||||
else it will prepend @var{right}"
|
||||
(define-music-function (parser location music) (ly:music? )
|
||||
(let ((note (get-first-note music)))
|
||||
(let ((note (_get-first-note music)))
|
||||
#{
|
||||
#(if (string=? (symbol->string (ly:music-property note 'drum-type)) "left-hand")
|
||||
#{ $left #}
|
||||
|
@ -98,6 +92,7 @@ optflamdr = #(autohandFunc optflamgdr optflamddr )
|
|||
% Drag
|
||||
drag = #(autohandFunc dragg dragd )
|
||||
dragdr = #(autohandFunc draggdr dragddr )
|
||||
|
||||
% Open Drag
|
||||
odrag = #(autohandFunc odragg odragd )
|
||||
odragdr = #(autohandFunc odraggdr odragddr )
|
|
@ -335,13 +335,26 @@ flourish = #(define-music-function (parser location notes) (ly:music?)
|
|||
#})
|
||||
|
||||
% See issue #4 (https://github.com/kastdeur/lilydrum/issues/4)
|
||||
scoop = #(define-music-function (music) (ly:music?)
|
||||
#{
|
||||
<>^"scoop"\startGroup
|
||||
#(allbutlastnote music)
|
||||
<>\stopGroup
|
||||
#(lastnote music)
|
||||
#})
|
||||
scoop = #(define-music-function (music) (ly:music?)
|
||||
(define (grace-music-filter event)
|
||||
(let ((eventname (ly:music-property event 'name)))
|
||||
(not (eq? eventname 'GraceMusic))))
|
||||
(let*
|
||||
(
|
||||
(music-copy (ly:music-deep-copy music))
|
||||
(es (extract-typed-music (music-filter grace-music-filter music-copy) 'note-event))
|
||||
)
|
||||
(if (< (length es) 2)
|
||||
(ly:message "A scoop requires at least two notes for positioning"))
|
||||
; do it anyway
|
||||
#{
|
||||
<>
|
||||
-\tweak HorizontalBracketText.text "scoop"
|
||||
-\tweak HorizontalBracketText.whiteout 1
|
||||
\startGroup
|
||||
#music
|
||||
\stopGroup
|
||||
#}))
|
||||
%---------------------------------------------------%
|
||||
% music function definitions
|
||||
%---------------------------------------------------%
|
|
@ -91,18 +91,6 @@ odr = #(define-event-function (parser location) () #{ -\tag #'tutti \startGroup
|
|||
ofr = #(define-event-function (parser location) () #{ -\tag #'tutti \stopGroup #})
|
||||
rn = #(define-event-function (parser location) () #{ -\tag #'tutti ^\markup \path #0.1 #'((moveto 0 0)(rlineto 0 1)(rlineto 4 0)(rlineto 0 -1)) #})
|
||||
|
||||
#(define (allbutlastnote mus)
|
||||
"Reverse the elements, Pop of (cdr) the first element, Reverse again, put it in a SequentialMusic"
|
||||
(let ((elts (ly:music-property mus 'elements)))
|
||||
(make-music 'SequentialMusic 'elements (reverse (cdr (reverse elts))))
|
||||
)
|
||||
)
|
||||
#(define (lastnote mus)
|
||||
"Get the last element, make it a list, put it in a SequentialMusic"
|
||||
(let ((elts (ly:music-property mus 'elements)))
|
||||
(make-music 'SequentialMusic 'elements (list (last elts)))
|
||||
)
|
||||
)
|
||||
tutti =
|
||||
#(define-music-function (myMusic) (ly:music?)
|
||||
(define (grace-music-filter event)
|
||||
|
@ -115,8 +103,8 @@ tutti =
|
|||
)
|
||||
(if (> (length es) 1)
|
||||
#{% multiple notes
|
||||
\once \override HorizontalBracket.connect-to-neighbor = #'(#t #t)
|
||||
<>\dr
|
||||
<>
|
||||
\dr
|
||||
#myMusic
|
||||
\fr
|
||||
#}
|
|
@ -4,20 +4,20 @@
|
|||
|
||||
% From Svenax's bagpipemusic
|
||||
markText = #(define-music-function (parser location text) (string?) #{
|
||||
\once \override Score.RehearsalMark #'self-alignment-X = #LEFT
|
||||
\once \override Score.RehearsalMark.self-alignment-X = #LEFT
|
||||
\mark \markup $text
|
||||
#})
|
||||
|
||||
markTextEol = #(define-music-function (parser location text) (string?) #{
|
||||
\once \override Score.RehearsalMark #'break-visibility = #end-of-line-visible
|
||||
\once \override Score.RehearsalMark #'self-alignment-X = #RIGHT
|
||||
\once \override Score.RehearsalMark.break-visibility = #end-of-line-visible
|
||||
\once \override Score.RehearsalMark.self-alignment-X = #RIGHT
|
||||
\mark \markup $text
|
||||
#})
|
||||
|
||||
markTextEolDown = #(define-music-function (parser location text) (string?) #{
|
||||
\once \override Score.RehearsalMark #'break-visibility = #end-of-line-visible
|
||||
\once \override Score.RehearsalMark #'self-alignment-X = #RIGHT
|
||||
\once \override Score.RehearsalMark #'direction = #DOWN
|
||||
\once \override Score.RehearsalMark.break-visibility = #end-of-line-visible
|
||||
\once \override Score.RehearsalMark.self-alignment-X = #RIGHT
|
||||
\once \override Score.RehearsalMark.direction = #DOWN
|
||||
\mark \markup $text
|
||||
#})
|
||||
altBracket = #(define-music-function (parser location tag) (string?) #{
|
Loading…
Reference in New Issue