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
    }
>>
```

Attachment: signature.asc
Description: This is a digitally signed message part

Reply via email to