Le vendredi 17 février 2023 à 16:39 -0600, Matthew Probst a écrit :
> I'm working on charts/scores for a full rock/funk band performance, and I am
> wondering whether there's an easy way to do what I'm looking for.
> I understand chordmode and nodemode, and I understand how to set up separate
> voices to show the chordnames and a pitch squashed rhythmic notation of hte
> chords. This makes for a really nice way to notate rhythm and chor dnames of
> guitar chords from the same chordnames variable without having to tweak it
> separately for both. The minimal Lilypond example looks like this (sorry
> about lack of attestation on the Scheme snippet to convert chords into just
> one note for the pitch squash staff, picked it up some time ago and lost
> track of it.)
>
> \version "2.24.1"
>
> VerseRhythmChords = {
> \chordmode {
> e16:9 r8 q16 r8 q16 r16 r16 q16 r8 q16 q16 r8
> e16:9 r8 q16 r8 q16 r16 r16 q16 r8 q16 q16 r8
> e16:9 r8 q16 r8 q16 r16 r16 q16 r8 q16 q16 r8
> bes16 q16 r16 q16 q4 g16 q16 r16 q16 q4
> }
> }
>
> firstNoteOfChord =
> #(define-music-function (music) (ly:music?)
> (define (iter mus)
> (let ((elt (ly:music-property mus 'element))
> (elts (ly:music-property mus 'elements)))
> (map iter elts)
> (if (not (null? elt)) (iter elt))
> (if (and (music-is-of-type? mus 'event-chord) (not (null? elts)))
> (ly:music-set-property! mus 'elements (list (car elts))))))
> (iter music)
> music)
>
> <<
> \new ChordNames {
> \set noChordSymbol = ""
> \set chordChanges = ##t
> \VerseRhythmChords
> }
> \new Voice \with {
> \consists "Pitch_squash_engraver"
> } {
> \improvisationOn
> \firstNoteOfChord \VerseRhythmChords
> \improvisationOff
> }
> >>
>
> Attached find a .PNG of the output. I tried to hide the noChordSymbol with
> the \set noChordSymbol = "". That hides the chord symbols, as I want to
> specify the rhythm in the chord part and don't want to show N.C. on every
> little rest. And I'd like to show just changes in the chord, not on every
> note. That works in cases where there are no rests between chords. But the
> hidden N.C. symbols still "cancel" whatever the last chord was, kinda
> flooding the page with lots of extraneous chords in this particular
> application.
>
> I see how the default behavior is logical and valuable in most cases, but I'm
> wondering, in individual user-specified caess:
>
> * Is there a way to somehow turn off the N.C. handling entirely, without a
> lot of trouble, for a given stretch of /chordmode? Not just hide the N.C.
> symbol, but cancel the fact that it determines those to be no-chord spots in
> the score.
>
> * Failing that, what's a good workflow for handling situations where I want
> to specify something more detailed than the "basic slash rhythm notation" in
> the manuals, and the chord names, without overly duplicating my work?
>
> Workarounds are welcome for now. What I find myself _wanting_ is a way to
> combine the articulations possible in /notemode (posisbly using special
> markups, as the syntax conflicts some) in /chordmode, in a way that passes
> through to the pitch squash engraver, without having to overly repeat myself.
> I have basic programming knowledge and a decent understanding of Scheme the
> language itself, but not lots of experience with the internals of Lilypond.
>
> I get that I'm steering outside what lots of people do with this, just
> wondering what approaches make sense here.
>
Maybe just convert all rests to skips? Like
```
\version "2.24.1"
VerseRhythmChords = {
\chordmode {
e16:9 r8 q16 r8 q16 r16 r16 q16 r8 q16 q16 r8
e16:9 r8 q16 r8 q16 r16 r16 q16 r8 q16 q16 r8
e16:9 r8 q16 r8 q16 r16 r16 q16 r8 q16 q16 r8
bes16 q16 r16 q16 q4 g16 q16 r16 q16 q4
}
}
firstNoteOfChord =
#(define-music-function (music) (ly:music?)
(define (iter mus)
(let ((elt (ly:music-property mus 'element))
(elts (ly:music-property mus 'elements)))
(map iter elts)
(if (not (null? elt)) (iter elt))
(if (and (music-is-of-type? mus 'event-chord) (not (null? elts)))
(ly:music-set-property! mus 'elements (list (car elts))))))
(iter music)
music)
restsToSkips =
#(define-music-function (music) (ly:music?)
(music-map (lambda (m)
(if (music-is-of-type? m 'general-rest-event)
(make-music 'SkipEvent m)
m))
music))
<<
\new ChordNames {
\set noChordSymbol = ""
\set chordChanges = ##t
\restsToSkips \VerseRhythmChords
}
\new Voice \with {
\consists "Pitch_squash_engraver"
} {
\improvisationOn
\firstNoteOfChord \VerseRhythmChords
\improvisationOff
}
>>
```
signature.asc
Description: This is a digitally signed message part
