Subject: Visualisation graphique de la musique

From: Michel Guénard (gmail) <[email-masked]>
Date: Sat, 23 Jan 2021 10:52:03 +0100

Bonjour à tous

Une curiosité ou bien une tendance? En tous cas voici un exemple de 
représentation possible; reste à lier ceci avec le graveur Lilypond.;-)

https://public.tableau.com/views/Songbird/Songbird?:language=en&:display_count=y&:origin=viz_share_link&:showVizHome=no#3

---

From: Jacques Menu <[email-masked]>
Date: Sat, 23 Jan 2021 12:11:55 +0100

Bonjour Michel,

Je n’ai pas noté (…) qui a proposé ça dans ce genre. En épaissisant les traits?

\version "2.16.0"

%% Works with 2.17.6
%% Works with 2.18.0
%% Works with 2.19.1

#(define (flat-gliss value)
  (lambda (grob)
    (let* ((left-Y (assoc-get 'Y (ly:grob-property grob 'left-bound-info)))
           (stencil (ly:line-spanner::print grob))
           (stencil-x-ext (ly:stencil-extent stencil X))
           (line-thickness (ly:staff-symbol-line-thickness grob))
           (staff-space (ly:staff-symbol-staff-space grob))
           (half-gliss-thick (- (/ staff-space 2) line-thickness))
           (bound-left (ly:spanner-bound grob LEFT))
           (bound-right (ly:spanner-bound grob RIGHT))
           (grob-name (lambda (x) (assq-ref (ly:grob-property x 'meta) 'name)))
           (note-head? (lambda (x) (eq? (grob-name x) 'NoteHead)))
           (staff-pos-left 
             (if (note-head? bound-left) 
               (ly:grob-property bound-left 'staff-position) 
               0))
           (staff-pos-right
             (if (note-head? bound-right) 
               (ly:grob-property bound-right 'staff-position) 
               0))
           (x-corr (lambda (x) (if (>= (abs x) 6) line-thickness 0)))
           (new-stencil 
             (ly:round-filled-box 
                (let ((x-corr-left (x-corr staff-pos-left))
                      (x-corr-right (* -4 (x-corr staff-pos-right))))
                 (cons (+ x-corr-left (car stencil-x-ext)) 
                       (+ x-corr-right 
                          (cdr stencil-x-ext) 
                          (* line-thickness 3))))
               (interval-widen (cons left-Y left-Y) (- half-gliss-thick value))
               0.1)))

          (ly:grob-set-nested-property! grob '(right-bound-info Y) left-Y) 
          new-stencil)))
          
flatGliss =
#(define-music-function (parser location glissando-stubs? val)
  ((boolean? #t) number?)
#{
        
        #(if glissando-stubs?
           #{ \override Glissando #'after-line-breaking = ##t #}
           #{ \revert Glissando #'after-line-breaking #})
        \override Glissando #'stencil = #(flat-gliss val)
        \override Glissando #'breakable = ##t
#})

%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%
          
one = \relative c' {
        
        b1 \glissando
        %% Works, because a spacer-rest doesn't define a NoteColumn
        s1*9
        \once \hideNotes
        b1
        <e' d >1 \glissando
        \break
        s1*8
        \break
        <e d>
}

two = \relative c' {
        s1
        f1 \glissando
        s1*6
        \once \hideNotes
        b1
}

three = \relative c' {
        s1*2
        d'1 \glissando
        s1*4
        \once \hideNotes
        d1
}

four = \relative c' {
        s1*3
        as''1 \glissando
        s1*2 \break
        a!4\glissando
        b \glissando
        c2 \glissando
        s1*2
        \revert Glissando #'stencil
        \override Glissando #'thickness = #3
        d1 \glissando
        s2..
        f,1
}

\score {
        \new Staff 
        <<
        \new Voice \one
        \new Voice \two
        \new Voice \three
        \new Voice \four
        \layout {
                \context {
                        \Voice
                        %% Increasing the number will result 
                        %% in a more narrow line.
                        %% Warning: if it is increased > 0.4 
                        %% a warning will appear and no line is printed!
                        
                       \flatGliss #0.23
                        \override NoteHead #'duration-log = #2
                        \override Stem #'stencil = ##f
                }
                \context {
                        \Staff
                        \remove "Time_signature_engraver"
                }
                \context {
                        \Score
                        defaultBarType = #"empty"
                }
        }
}

> Le 23 janv. 2021 à 10:52, Michel Guénard (gmail) <[email-masked]> a écrit :
> 
> Bonjour à tous
> 
> Une curiosité ou bien une tendance? En tous cas voici un exemple de représentation possible; reste à lier ceci avec le graveur Lilypond.;-)
> 
> https://public.tableau.com/views/Songbird/Songbird?:language=en&:display_count=y&:origin=viz_share_link&:showVizHome=no#3 <https://public.tableau.com/views/Songbird/Songbird?:language=en&:display_count=y&:origin=viz_share_link&:showVizHome=no#3>
> 
> 
>

---

From: Jean Abou Samra <[email-masked]>
Date: Fri, 29 Jan 2021 19:52:14 +0100

> https://public.tableau.com/views/Songbird/Songbird?:language=en&:display_count=y&:origin=viz_share_link&:showVizHome=no#3

Bonjour,

Je ne sais pas dans quelle mesure la question est sérieuse... en tous 
cas, intéressante.

Sans grande surprise, le code que proposait Jacques est de Harm 
(https://lists.gnu.org/archive/html/lilypond-user/2014-03/msg00260.html), 
qui l'a depuis intégré à LilyPond lui-même, si bien qu'aujourd'hui, il 
est relativement simple de créer ce genre de graphiques avec quelque 
chose comme :

\version "2.23.0"

musique = <<
   { r8 g'16\- c''\- e''\- g'\- c''\- e''\- }
   \\
   { r16 e'8.~\- e'4 }
   \\
   { c'2\- }

{ \musique }

\score {
   \layout {
     \context {
       \Voice
       \consists "Duration_line_engraver"
       \override DurationLine.color = grey
       \remove "Stem_engraver"
       \remove "Tie_engraver"
       \remove "Rest_engraver"
       \remove "Dots_engraver"
       \omit NoteHead
     }
     \context {
       \Staff
       \override StaffSymbol.line-count = 15
       \override StaffSymbol.color = lightgrey
       \remove "Clef_engraver"
       \remove "Time_signature_engraver"
     }
     \context {
       \Score
       \remove "System_start_delimiter_engraver"
     }
   }
   \musique
}

Cordialement,
Jean