parallel versus series scoring

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

parallel versus series scoring

-DeeT
I'm a newcomer to lilypond, having previously used abc.  One thing I find vexing is how to enter scores so it is easy to see all the staves on the screen at the same time during coding (i.e. in the source code).

The Lilypond manual explains well how to code this way:

staff1, all measures
staff2, all measures
staff3, all measures

With compositions of any length, this means you can't see in the source, for instance, measure 57 from all staves at the same time, except perhaps with awkward editor screen splits.

I'd prefer to have this organization in the source:

staff1,measure-group1
staff2,measure-group1
staff3,measure-group1
%
staff1,measure-group2
staff2,measure-group2
staff3,measure-group2

This is how I'm accustomed to coding in abc, and what I like about it is that I get to the point where I can compose this way, without having to use paper first.  In a sense, the source is organized similarly to the actual score, with staves aligned vertically and the notes proceeding to the right.

I suppose it would be possible to do this with the simple expedient of using one text line for each staff, no matter how long it is, but then it's not particularly scrollable or printable.  A better solution would be to break each staff up into measure groups that fit in a conveniently-sized line of source.

Two ways I can think of that might work would be...

1. assign measure groups to separate strings, then concatenate the strings
2. change contexts on the fly, adding notes to each staff in turn (like abc)

Unfortunately I'm having a hard time figuring out how to do either.  Could any seasoned lilyponders offer me some coding advice, and help me "across the pond", so to speak?

Thanks...
David
Reply | Threaded
Open this post in threaded view
|

Re: parallel versus series scoring

John Wiedenhoeft
Well, I don't know if Lilypond provides something like this. What I do
sometimes is using a spreadsheet editor (OOo Calc, Excel) with one cell
per bar. With this method, you are not limited to one dimension, but
have two, as in a real score. You can stack simultaneous bars under each
other. You can also use cell references to structure your score.

Cheers,
John



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

Re: parallel versus series scoring

Graham Percival-2
In reply to this post by -DeeT

On 18-Jan-06, at 2:15 AM, -DeeT (sent by Nabble.com) wrote:

>  I'm a newcomer to lilypond, having previously used abc. ¬†One thing I
> find vexing is how to enter scores so it is easy to see all the staves
> on the screen at the same time during coding (i.e. in the source
> code).

See sly at
http://openguitar.com/lyutilities.html

Cheers,
- Graham


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

Re: parallel versus series scoring

Nicolas Sceaux
In reply to this post by -DeeT
"-DeeT (sent by Nabble.com)" <[hidden email]> writes:

> The Lilypond manual explains well how to code this way:
>
> staff1, all measures
> staff2, all measures
> staff3, all measures
>
> I'd prefer to have this organization in the source:
>
> staff1,measure-group1
> staff2,measure-group1
> staff3,measure-group1
> %
> staff1,measure-group2
> staff2,measure-group2
> staff3,measure-group2

The following function may enable the style you want. It uses the "|"
bar check sign to separate different voices:

staff1 measure-group1 | staff2 measure-group1 | staff3 measure-group1 |
staff1 measure-group2 | staff2 measure-group2 | staff3 measure-group2 |


------------------------------------------------------
parallelMusic =
#(def-music-function (parser location voice-number music) (number? ly:music?)
  (let ((voices (make-vector voice-number (list)))
        (current 0))
    (define (push-music music index)
      (vector-set! voices index
                  (cons music (vector-ref voices index))))
    (map-in-order (lambda (m)
                    (push-music m current)
                    (if (eq? (ly:music-property m 'name) 'BarCheck)
                        (set! current (modulo (1+ current) voice-number))))
                  (ly:music-property music 'elements))
    (make-music 'SimultaneousMusic
      'elements (map-in-order (lambda (music-list)
                                #{ \new Staff $(make-music 'SequentialMusic
                                               'elements (reverse! music-list)) #})
                              (vector->list voices)))))

\new StaffGroup \parallelMusic #'3 {
  \time 4/4
  g' g' g' g' |
  e' e' e' e' |
  c' c' c' c' |
%%
  \time 3/4 a' a' a' | fis' fis' fis' |d' d' d' |
%%
  \time 2/4
  b'   b'   c'' c'' |
  gis' gis' a'  a' |
  e'   e'   f'  f' |
}
------------------------------------------------------

You can also define something similar for mixing a melody and lyrics,
but you'll have to use \lyricmode explicitly, which is not convenient
here.

------------------------------------------------------
songMusic =
#(def-music-function (parser location music) (ly:music?)
  (let ((voices (make-vector 2 (list)))
        (current 0)
        (voice-number 2))
    (define (push-music music index)
      (vector-set! voices index
                  (cons music (vector-ref voices index))))
    (map-in-order (lambda (m)
                    (push-music m current)
                    (if (eq? (ly:music-property m 'name) 'BarCheck)
                        (set! current (modulo (1+ current) voice-number))))
                  (ly:music-property music 'elements))
   (let ((voice (make-music 'SequentialMusic
                 'elements (reverse! (vector-ref voices 0))))
         (lyrics  (make-music 'SequentialMusic
                 'elements (reverse! (vector-ref voices 1)))))
    #{ \new Voice { $voice } \addlyrics { $lyrics } #})))

\new StaffGroup \songMusic {
  c'8 c' c' d' e'4 d' |
  \lyricmode { Au clair de la lu -- ne, } |
%%
  c'8 e'8 d' d' c'2 |
  \lyricmode { mon a -- mi Pier -- rot } |
}
------------------------------------------------------

Note that these are just hacks.

nicolas


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

Re: parallel versus series scoring

John Wiedenhoeft
In reply to this post by John Wiedenhoeft
of course,

its pretty simple - see attached file. After you finished a piece, do
ctrl+a and copy the content of the cells to a .ly file.

cheers,
john

Am Mittwoch, den 18.01.2006, 14:05 -0800 schrieb Jay Hamilton, Sound and
Silence:

> John-
> Could you go into this alittle more.  I'm using OOo alot though the
> winxp version for lilypond and music matters.
> I'm also trying to write largish scores and keeping track of everything
> is a problem.  But what I'm unsure about with your 'solution' is how do
> you then copy/paste the material into a form that lily can read? Without
> the underlying coding of OOo interferring with the music?
> Jay
>
> John Wiedenhoeft wrote:
>
> >Well, I don't know if Lilypond provides something like this. What I do
> >sometimes is using a spreadsheet editor (OOo Calc, Excel) with one cell
> >per bar. With this method, you are not limited to one dimension, but
> >have two, as in a real score. You can stack simultaneous bars under each
> >other. You can also use cell references to structure your score.
> >
> >Cheers,
> >John
> >
> >
> >
> >_______________________________________________
> >lilypond-user mailing list
> >[hidden email]
> >http://lists.gnu.org/mailman/listinfo/lilypond-user
> >
> >
> >  
> >
>

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

barbireau.ly.xls (13K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: parallel versus series scoring

Han-Wen Nienhuys
In reply to this post by Nicolas Sceaux
Nicolas Sceaux wrote:
> ------------------------------------------------------
> parallelMusic =
> #(def-music-function (parser location voice-number music) (number? ly:music?)

it's hack, but it's a cool one. With a little polishing, we should be
able to put it in the standard distribution. Wouldn't it be better to
store the voices in different variables? It would be nice to check
whether the lengths of all bars are equal.

--
  Han-Wen Nienhuys - [hidden email] - http://www.xs4all.nl/~hanwen


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

Re: parallel versus series scoring

Han-Wen Nienhuys
David B. Thomas wrote:

>>Wouldn't it be better to
>>store the voices in different variables?
>
>
> I'd be happy to do this.  Then the syntax could look something like this:
>
> voice1verse1 = { some notes }
> voice2verse1 = { more notes }
>
> voice1verse2 = concatenate { still more notes };
> voice2verse2 = concatenate { ..and more notes };
>

Hey, that's a neat idea. We could append to variables iso. overwriting,
if they have been defined before,

   \parallelMusic #'(a b) { c | d | c | d }
   \parallelMusic #'(a b) { p | q }

->

  a = { { c c } p }
  b = { { d d } q }

--
  Han-Wen Nienhuys - [hidden email] - http://www.xs4all.nl/~hanwen


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