Jump to content

Generating scores within a function: Difference between revisions

From LilyPond wiki
Import snippet from LSR
 
m New category
Tags: Mobile edit Mobile web edit
 
(2 intermediate revisions by 2 users not shown)
Line 2: Line 2:
This makes it possible to generate scores in a semi-automated way, as demonstrated here.
This makes it possible to generate scores in a semi-automated way, as demonstrated here.


<lilypond version="2.24.0" full>
<lilypond version="2.24" full>
%% LSR originally contributed by Gilles Thibault:
%% LSR originally contributed by Gilles Thibault:
%% https://lists.gnu.org/archive/html/lilypond-user-fr/2011-11/msg00141.html
%% https://lists.gnu.org/archive/html/lilypond-user-fr/2011-11/msg00141.html
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