Generating scores within a function: Difference between revisions
Appearance
m Replace version="2.24.0" with version="2.24" now that the LilyWiki extension supports auto-selecting the latest release in a stable series Tags: Mobile edit Mobile web edit |
m New category Tags: Mobile edit Mobile web edit |
||
| (One intermediate revision by the same user not shown) | |||
| Line 45: | Line 45: | ||
[[Category:Scheme]] | [[Category:Scheme]] | ||
[[Category:Snippet]] | |||
Latest revision as of 23:18, 21 November 2025
A music-function uses variables at the point where it's invoked; as a result, if variables are then redefined, the same function will then use the same variables with their new value.
This makes it possible to generate scores in a semi-automated way, as demonstrated here.
\version "2.24"
%% LSR originally contributed by Gilles Thibault:
%% https://lists.gnu.org/archive/html/lilypond-user-fr/2011-11/msg00141.html
%% See also http://lsr.di.unimi.it/LSR/Item?id=630
%% and https://lists.gnu.org/archive/html/lilypond-user/2015-04/msg00311.html
\paper { tagline = ##f }
duo =
#(define-music-function (nr) (number?)
(let* ((s (number->string nr))
(h (make-module))
(m (ly:make-score
#{<<
\new Staff { \global \clarI }
\new Staff { \global \clarII }
>>
#})))
(module-define! h 'piece (markup #:concat ("Duo n." s)))
(ly:score-set-header! m h)
(collect-scores-for-book m)
(make-music 'Music 'void #t)))
%%%%%%%%%% Duo 1
global = { \key c \major \time 4/4 }
clarI = { e'1}
clarII = { c'1}
\duo #1
%%%%%%%%%% Duo 2
global = { \key d \minor \time 3/4 }
clarI = { f'2.}
clarII = { d'2.}
\duo #2
%%%%%%%%%% Duo 3
global = { \key e \minor \time 2/4 }
clarI = { g'2}
clarII = { e'2}
\duo #3