segmented glissando lines

classic Classic list List threaded Threaded
14 messages Options
Reply | Threaded
Open this post in threaded view
|

segmented glissando lines

Orm Finnendahl-5
Hi,

 I can't find documentation about how to write segmented glissando
lines, like in the attached png. The line segments have to get notated
with precise rhythms, so I'm looking for something similar to
glissando notation but without noteheads.

I tried this:

\new Staff
\relative c'' {
  \hide NoteHead
  \hide Stem
  d,8 \glissando  f' \glissando
  d, \glissando  f' \glissando
  e, \glissando  g' \glissando
  d, \glissando  f' \glissando
}

But this only makes the NoteHeads invisible. Removing the
Note_heads_engraver makes the glissandolines disappear.

Does anybody know how to achieve this?

--
Orm

_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user

tobiastest.png (17K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Urs Liska
Am 10.01.2015 um 22:22 schrieb Orm Finnendahl:

> Hi,
>
>   I can't find documentation about how to write segmented glissando
> lines, like in the attached png. The line segments have to get notated
> with precise rhythms, so I'm looking for something similar to
> glissando notation but without noteheads.
>
> I tried this:
>
> \new Staff
> \relative c'' {
>    \hide NoteHead
>    \hide Stem
>    d,8 \glissando  f' \glissando
>    d, \glissando  f' \glissando
>    e, \glissando  g' \glissando
>    d, \glissando  f' \glissando
> }
>
> But this only makes the NoteHeads invisible. Removing the
> Note_heads_engraver makes the glissandolines disappear.
>
> Does anybody know how to achieve this?

Can't test right now, but what about \omit NoteHead?

Urs

>
> --
> Orm
>
>
>
> _______________________________________________
> lilypond-user mailing list
> [hidden email]
> https://lists.gnu.org/mailman/listinfo/lilypond-user
>


--
Urs Liska
www.openlilylib.org

_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Orm Finnendahl-5
Hi Urs,

Am Samstag, den 10. Januar 2015 um 22:22:15 Uhr (+0100) schrieb Urs
Liska:
>
> Can't test right now, but what about \omit NoteHead?

same problem, glissandolines aren't drawn at all if NoteHeads are
omitted:

%<----------------------------------------------------
\version "2.19"

\new Staff
\relative c'' {
  \omit NoteHead
  d,2 \glissando  f' \glissando
  d, \glissando  f' \glissando
  e, \glissando  g' \glissando
  d, \glissando  f' \glissando

}

\paper {
  ragged-right = ##f
  }
%<----------------------------------------------------



_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Urs Liska
Am 10.01.2015 um 23:02 schrieb Orm Finnendahl:
> Hi Urs,
>
> Am Samstag, den 10. Januar 2015 um 22:22:15 Uhr (+0100) schrieb Urs
> Liska:
>>
>> Can't test right now, but what about \omit NoteHead?
>
> same problem, glissandolines aren't drawn at all if NoteHeads are
> omitted:

And making the NoteHead infinitely small?

\override NoteHead #'stencil = #point-stencil ???

Can't one override the extent of a grob to be zero? AFAIK this is
usually done to deliberately avoid collision handling but couldn't this
be used in conjunction with \hide to achieve what you want?

HTH
Urs

>
> %<----------------------------------------------------
> \version "2.19"
>
> \new Staff
> \relative c'' {
>    \omit NoteHead
>    d,2 \glissando  f' \glissando
>    d, \glissando  f' \glissando
>    e, \glissando  g' \glissando
>    d, \glissando  f' \glissando
>
> }
>
> \paper {
>    ragged-right = ##f
>    }
> %<----------------------------------------------------
>
>
>
> _______________________________________________
> lilypond-user mailing list
> [hidden email]
> https://lists.gnu.org/mailman/listinfo/lilypond-user
>


--
Urs Liska
www.openlilylib.org

_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Schneidy
In reply to this post by Orm Finnendahl-5
Hi Orm,

How about :

\version "2.19.15"

#(define (add-gliss m)
   (case (ly:music-property m 'name)
     ((NoteEvent) (set! (ly:music-property m 'articulations)
                      (append (ly:music-property m 'articulations)
                         (list (make-music (quote GlissandoEvent)))))
                   m)
     (else #f)))

addGliss = #(define-music-function (parser location music)
                 (ly:music?)
           (map-some-music add-gliss music))

\relative c'' {
  \override Glissando.thickness = #2
  \override Glissando.bound-details =#'(
     (right (attach-dir . 1) (padding . 0))
     (left  (attach-dir . 1) (padding . 0)))
  \override NoteHead.no-ledgers = ##t
  \addGliss {
    d,2
    \omit Stem
    \override NoteHead.transparent = ##t
    f' d, f' e, g' d, f'
  }
}


Cheers,
Pierre


_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Orm Finnendahl-5
Hi Pierre, Urs,

 that's excellent and very instructional, thanks!

--
Orm


Am Samstag, den 10. Januar 2015 um 23:56:03 Uhr (+0100) schrieb Pierre Perol-Schneider:

> Hi Orm,
>
> How about :
>
> \version "2.19.15"
>
> #(define (add-gliss m)
>    (case (ly:music-property m 'name)
>      ((NoteEvent) (set! (ly:music-property m 'articulations)
>                       (append (ly:music-property m 'articulations)
>                          (list (make-music (quote GlissandoEvent)))))
>                    m)
>      (else #f)))
>
> addGliss = #(define-music-function (parser location music)
>                  (ly:music?)
>            (map-some-music add-gliss music))
>
> \relative c'' {
>   \override Glissando.thickness = #2
>   \override Glissando.bound-details =#'(
>      (right (attach-dir . 1) (padding . 0))
>      (left  (attach-dir . 1) (padding . 0)))
>   \override NoteHead.no-ledgers = ##t
>   \addGliss {
>     d,2
>     \omit Stem
>     \override NoteHead.transparent = ##t
>     f' d, f' e, g' d, f'
>   }
> }
>
>
> Cheers,
> Pierre

> _______________________________________________
> lilypond-user mailing list
> [hidden email]
> https://lists.gnu.org/mailman/listinfo/lilypond-user


_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Thomas Morley-2
2015-01-11 10:28 GMT+01:00 Orm Finnendahl
<[hidden email]>:

> Hi Pierre, Urs,
>
>  that's excellent and very instructional, thanks!
>
> --
> Orm
>
>
> Am Samstag, den 10. Januar 2015 um 23:56:03 Uhr (+0100) schrieb Pierre Perol-Schneider:
>> Hi Orm,
>>
>> How about :
>>
>> \version "2.19.15"
>>
>> #(define (add-gliss m)
>>    (case (ly:music-property m 'name)
>>      ((NoteEvent) (set! (ly:music-property m 'articulations)
>>                       (append (ly:music-property m 'articulations)
>>                          (list (make-music (quote GlissandoEvent)))))
>>                    m)
>>      (else #f)))
>>
>> addGliss = #(define-music-function (parser location music)
>>                  (ly:music?)
>>            (map-some-music add-gliss music))
>>
>> \relative c'' {
>>   \override Glissando.thickness = #2
>>   \override Glissando.bound-details =#'(
>>      (right (attach-dir . 1) (padding . 0))
>>      (left  (attach-dir . 1) (padding . 0)))
>>   \override NoteHead.no-ledgers = ##t
>>   \addGliss {
>>     d,2
>>     \omit Stem
>>     \override NoteHead.transparent = ##t
>>     f' d, f' e, g' d, f'
>>   }
>> }
>>
>>
>> Cheers,
>> Pierre


Below my own attempt.
It has some advantages and limitations compared with Pierre's coding.

There is one thing I have no clue about:
If the function is applied to a dotted whole note some very strange
things may happen and a warning is printed:
"Loose column does not have right side to attach to."

If someone has an idea how to fix, I'd love to hear it.
(Look out for
 %% !!!!!!!!!!!!!!!!!!!!!
if you want to test)




\version "2.19.15"

%#(use-modules (ice-9 pretty-print))

lengthen-gliss =
#(define-music-function (parser loation nmbr)(number?)
#{
  \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
  \once \override Glissando.minimum-length = #nmbr
#})

fancy-gliss =
#(define-music-function (parser location pts-list)(list?)
#{
 \once \override Glissando.after-line-breaking =
  #(lambda (grob)
    (let ((stil (ly:line-spanner::print grob)))
     (if (ly:stencil? stil)
         (let*
           ((left-bound-info (ly:grob-property grob 'left-bound-info))
            (left-bound (ly:spanner-bound grob LEFT))
            (y-off (assoc-get 'Y left-bound-info))
            (padding (assoc-get 'padding left-bound-info))
            (note-column (ly:grob-parent left-bound X))
            (note-heads (ly:grob-object note-column 'note-heads))
            (ext-X
              (if (null? note-heads)
                  '(0 . 0)
                  (ly:relative-group-extent note-heads grob X)))
            (dot-column (ly:note-column-dot-column note-column))
            (dots
              (if (null? dot-column)
                  '()
                  (ly:grob-object dot-column 'dots)))
            (dots-ext-X
              (if (null? dots)
                  '(0 . 0)
                  (ly:relative-group-extent dots grob X)))
            (factor
              (/ (interval-length (ly:stencil-extent stil X))
                 (car (take-right (last pts-list) 2))))
            (new-stil
              (make-connected-path-stencil
                (map
                  (lambda (e)
                    (cond ((= (length e) 2)
                           (cons (* (car e) factor) (cdr e)))
                          ((= (length e) 6)
                           (list
                             (* (car e) factor)
                             (cadr e)
                             (* (third e) factor)
                             (fourth e)
                             (* (fifth e) factor)
                             (sixth e)))
                          (else
                            (ly:error
                              "Some element(s) of the given list do
not fit"))))
                  pts-list)
                (layout-line-thickness grob) ;line-width
                1   ;scaling
                1   ;scaling
                #f
                #f)))
         (ly:grob-set-property! grob 'stencil
           (ly:stencil-translate
            new-stil
            (cons (+ (interval-length ext-X)
                     (interval-length dots-ext-X)
                     padding)
                  y-off))))
       (begin
         (ly:warning
           "Cannot find stencil. Please set 'minimum-length accordingly")
         #f))))
#})

#(display "\n\tLimitations:
\t-Does not work with line-break
\t-dotted notes with glissando may return a warning for unknown reasons,
\t strange things may happen")

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\paper { indent = 28 }

\header { title = "Fancy Glissando" }

music = <<
  \new Staff \with { instrumentName = "fancy-gliss " }
    \relative c' {
      \set Score.defaultBarType = #""
      %% If spacing is very tight Glissando sometimes is omitted.
      %% Use 'lengthen-gliss' with an apropiate value in this case.
      %\lengthen-gliss #10
      \fancy-gliss
        #'(
         (1 3)
         (2 0)
         (3 3)
         (4 1)
         (5 3.5)
         (6 0)
         (7 0 8 5 12 0)
         )
      f1\glissando
      f1
    }

  \new Staff \with { instrumentName = "skipping a column" }
    \relative c' {
      %\lengthen-gliss #10
      \fancy-gliss
        #'(
         (1 3)
         (2 0)
         (3 3)
         (4 1)
         (5 3.5)
         (6 0)
         (7 0 8 5 12 0)
         )
      %% !!!!!!!!!!!!!!!!!!!!!
      f1 %% change to f1. to view some strange things happen
      \glissando
      s1
      f1
    }

  \new Staff \with { instrumentName = "control-staff " }
    \relative c' { a'1 a1 a1 }
>>

\score {
  \transpose c b \music
%% uncomment to let happen very tight spacing happen, use 'lengthen-gliss' then.
% \layout {
%   line-width = 10
% }
}

\score {
  \music
  \layout {
    ragged-right = ##f
  }
}


Cheers,
  Harm

attached two pngs, one with the intended out put, the other while
using a dotted whole note.

_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user

fancy-gliss-02-intended.png (26K) Download Attachment
fancy-gliss-02-strange.png (26K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Urs Liska
Hi Harm,

this is terrific!
I'm about to collect a number of examples why LilyPond rocks for engraving contemporary music, and this should definitely be part of it.

Best
Urs

Am 12.01.2015 um 00:00 schrieb Thomas Morley:
2015-01-11 10:28 GMT+01:00 Orm Finnendahl
[hidden email]:
Hi Pierre, Urs,

 that's excellent and very instructional, thanks!

--
Orm


Am Samstag, den 10. Januar 2015 um 23:56:03 Uhr (+0100) schrieb Pierre Perol-Schneider:
Hi Orm,

How about :

\version "2.19.15"

#(define (add-gliss m)
   (case (ly:music-property m 'name)
     ((NoteEvent) (set! (ly:music-property m 'articulations)
                      (append (ly:music-property m 'articulations)
                         (list (make-music (quote GlissandoEvent)))))
                   m)
     (else #f)))

addGliss = #(define-music-function (parser location music)
                 (ly:music?)
           (map-some-music add-gliss music))

\relative c'' {
  \override Glissando.thickness = #2
  \override Glissando.bound-details =#'(
     (right (attach-dir . 1) (padding . 0))
     (left  (attach-dir . 1) (padding . 0)))
  \override NoteHead.no-ledgers = ##t
  \addGliss {
    d,2
    \omit Stem
    \override NoteHead.transparent = ##t
    f' d, f' e, g' d, f'
  }
}


Cheers,
Pierre


Below my own attempt.
It has some advantages and limitations compared with Pierre's coding.

There is one thing I have no clue about:
If the function is applied to a dotted whole note some very strange
things may happen and a warning is printed:
"Loose column does not have right side to attach to."

If someone has an idea how to fix, I'd love to hear it.
(Look out for
 %% !!!!!!!!!!!!!!!!!!!!!
if you want to test)




\version "2.19.15"

%#(use-modules (ice-9 pretty-print))

lengthen-gliss =
#(define-music-function (parser loation nmbr)(number?)
#{
  \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
  \once \override Glissando.minimum-length = #nmbr
#})

fancy-gliss =
#(define-music-function (parser location pts-list)(list?)
#{
 \once \override Glissando.after-line-breaking =
  #(lambda (grob)
    (let ((stil (ly:line-spanner::print grob)))
     (if (ly:stencil? stil)
         (let*
           ((left-bound-info (ly:grob-property grob 'left-bound-info))
            (left-bound (ly:spanner-bound grob LEFT))
            (y-off (assoc-get 'Y left-bound-info))
            (padding (assoc-get 'padding left-bound-info))
            (note-column (ly:grob-parent left-bound X))
            (note-heads (ly:grob-object note-column 'note-heads))
            (ext-X
              (if (null? note-heads)
                  '(0 . 0)
                  (ly:relative-group-extent note-heads grob X)))
            (dot-column (ly:note-column-dot-column note-column))
            (dots
              (if (null? dot-column)
                  '()
                  (ly:grob-object dot-column 'dots)))
            (dots-ext-X
              (if (null? dots)
                  '(0 . 0)
                  (ly:relative-group-extent dots grob X)))
            (factor
              (/ (interval-length (ly:stencil-extent stil X))
                 (car (take-right (last pts-list) 2))))
            (new-stil
              (make-connected-path-stencil
                (map
                  (lambda (e)
                    (cond ((= (length e) 2)
                           (cons (* (car e) factor) (cdr e)))
                          ((= (length e) 6)
                           (list
                             (* (car e) factor)
                             (cadr e)
                             (* (third e) factor)
                             (fourth e)
                             (* (fifth e) factor)
                             (sixth e)))
                          (else
                            (ly:error
                              "Some element(s) of the given list do
not fit"))))
                  pts-list)
                (layout-line-thickness grob) ;line-width
                1   ;scaling
                1   ;scaling
                #f
                #f)))
         (ly:grob-set-property! grob 'stencil
           (ly:stencil-translate
            new-stil
            (cons (+ (interval-length ext-X)
                     (interval-length dots-ext-X)
                     padding)
                  y-off))))
       (begin
         (ly:warning
           "Cannot find stencil. Please set 'minimum-length accordingly")
         #f))))
#})

#(display "\n\tLimitations:
\t-Does not work with line-break
\t-dotted notes with glissando may return a warning for unknown reasons,
\t strange things may happen")

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\paper { indent = 28 }

\header { title = "Fancy Glissando" }

music = <<
  \new Staff \with { instrumentName = "fancy-gliss " }
    \relative c' {
      \set Score.defaultBarType = #""
      %% If spacing is very tight Glissando sometimes is omitted.
      %% Use 'lengthen-gliss' with an apropiate value in this case.
      %\lengthen-gliss #10
      \fancy-gliss
        #'(
         (1 3)
         (2 0)
         (3 3)
         (4 1)
         (5 3.5)
         (6 0)
         (7 0 8 5 12 0)
         )
      f1\glissando
      f1
    }

  \new Staff \with { instrumentName = "skipping a column" }
    \relative c' {
      %\lengthen-gliss #10
      \fancy-gliss
        #'(
         (1 3)
         (2 0)
         (3 3)
         (4 1)
         (5 3.5)
         (6 0)
         (7 0 8 5 12 0)
         )
      %% !!!!!!!!!!!!!!!!!!!!!
      f1 %% change to f1. to view some strange things happen
      \glissando
      s1
      f1
    }

  \new Staff \with { instrumentName = "control-staff " }
    \relative c' { a'1 a1 a1 }

        
\score {
  \transpose c b \music
%% uncomment to let happen very tight spacing happen, use 'lengthen-gliss' then.
% \layout {
%   line-width = 10
% }
}

\score {
  \music
  \layout {
    ragged-right = ##f
  }
}


Cheers,
  Harm

attached two pngs, one with the intended out put, the other while
using a dotted whole note.


_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user


_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Thomas Morley-2
2015-01-12 0:06 GMT+01:00 Urs Liska <[hidden email]>:
> Hi Harm,
>
> this is terrific!
> I'm about to collect a number of examples why LilyPond rocks for engraving
> contemporary music, and this should definitely be part of it.



Hi Urs,

glad you like it.
Though, there's the problem I mentioned and it needs some real life testing.

Cheers,
  Harm

_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Urs Liska

Am 12.01.2015 um 00:37 schrieb Thomas Morley:

> 2015-01-12 0:06 GMT+01:00 Urs Liska <[hidden email]>:
>> Hi Harm,
>>
>> this is terrific!
>> I'm about to collect a number of examples why LilyPond rocks for engraving
>> contemporary music, and this should definitely be part of it.
>
>
> Hi Urs,
>
> glad you like it.
> Though, there's the problem I mentioned and it needs some real life testing.

Yes, I know. But as usual with advertising I think we can generously
ignore that :-/

Best
Urs

> Cheers,
>    Harm


_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Schneidy
Nice Harm !
Thanks for the code.
Cheers,
Pierre

2015-01-12 0:39 GMT+01:00 Urs Liska <[hidden email]>:

Am 12.01.2015 um 00:37 schrieb Thomas Morley:
2015-01-12 0:06 GMT+01:00 Urs Liska <[hidden email]>:
Hi Harm,

this is terrific!
I'm about to collect a number of examples why LilyPond rocks for engraving
contemporary music, and this should definitely be part of it.


Hi Urs,

glad you like it.
Though, there's the problem I mentioned and it needs some real life testing.

Yes, I know. But as usual with advertising I think we can generously ignore that :-/

Best
Urs


Cheers,
   Harm


_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user


_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Thomas Morley-2
In reply to this post by Urs Liska
2015-01-12 0:39 GMT+01:00 Urs Liska <[hidden email]>:

>
> Am 12.01.2015 um 00:37 schrieb Thomas Morley:
>
>> 2015-01-12 0:06 GMT+01:00 Urs Liska <[hidden email]>:
>>>
>>> Hi Harm,
>>>
>>> this is terrific!
>>> I'm about to collect a number of examples why LilyPond rocks for
>>> engraving
>>> contemporary music, and this should definitely be part of it.
>>
>>
>>
>> Hi Urs,
>>
>> glad you like it.
>> Though, there's the problem I mentioned and it needs some real life
>> testing.
>
>
> Yes, I know. But as usual with advertising I think we can generously ignore
> that :-/
>
> Best
> Urs
>
>> Cheers,
>>    Harm
>
>

Hi Urs,

I could verify that's not my coding triggering the weird output.
Looks like a bug in our source. I just wrote a bug-report about it:
http://lilypond.1069038.n5.nabble.com/bug-with-combination-of-glissando-bar-quot-quot-dotted-whole-note-and-time-4-4-td170423.html

Cheer,
  Harm

_______________________________________________
lilypond-user mailing list
[hidden email]
https://lists.gnu.org/mailman/listinfo/lilypond-user
Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

dtsmarin
In reply to this post by Thomas Morley-2
Is it possible to change the thickness of the fancy-gliss line?



--
Sent from: http://lilypond.1069038.n5.nabble.com/User-f3.html

Reply | Threaded
Open this post in threaded view
|

Re: segmented glissando lines

Aaron Hill
On 2020-02-09 2:39 pm, dtsmarin wrote:
> Is it possible to change the thickness of the fancy-gliss line?

Perhaps change...

;;;;
     (layout-line-thickness grob) ;line-width
;;;;

...to...

;;;;
     (* (layout-line-thickness grob)
        (ly:grob-property grob 'thickness 1)) ;line-width
;;;;

Then you can set the thickness property of the Glissando grob.


-- Aaron Hill