On 20 November 2017 at 23:01, David Kastrup <[email protected]> wrote:
> Gianmaria Lari <[email protected]> writes:
>
> > On 20 November 2017 at 15:18, David Kastrup <[email protected]> wrote:
> >
> >> Gianmaria Lari <[email protected]> writes:
> >>
> >> > On 20 November 2017 at 12:00, David Kastrup <[email protected]> wrote:
> >> >
> >> >> Gianmaria Lari <[email protected]> writes:
> >>
> >> >> > Is there any (simple) way to rewrite it in a more concise way like
> >> >> > this for example?
> >> >> >
> >> >> > \repeat unfold 7 {
> >> >> > \modalTranspose c "c+index" \scale \pattern
> >> >> > }
> >> >>
> >> >> What is simple?
> >> >>
> >> >> \version "2.18.0"
> >> >>
> >> >> scale = {c d e f g a b}
> >> >> pattern = {c d e f}
> >> >>
> >> >> \fixed c' {
> >> >> #@(map
> >> >> (lambda (p)
> >> >> #{ \modalTranspose c #(ly:make-pitch -1 p) \scale \pattern
> #})
> >> >> (iota 8))
> >> >> }
> >> >
> >> > Thank you David, it works perfectly!
> >> >
> >> > Is there any way to encapsulate it in a function to avoid to write
> >> > all the code any time I need it?
> >>
> >> What is "all the code"? I really have no idea what makes you consider
> >> something simple (and your "explanation" below does not help at all
> >> since it is tantamount to "simple depends on the viewer's metrics").
> >> I also have no idea what part of the above you consider "it" to be
> >> encapsulated and what you consider variable.
> >
> > I'm sorry I have not been clear. If you have a look to the following
> source
> > you'll see that the same code is repeated three times (only the variable
> > 'pattern' changes).
> >
> > \version "2.18.0"
> > scale = {c d e f g a b}
> >
> > pattern = {c d e f}
> > \fixed c' {
> > #@(map
> > (lambda (p)
> > #{ \modalTranspose c #(ly:make-pitch -1 p) \scale \pattern #})
> > (iota 8))
> > }
> >
> > pattern = {f e d c}
> > \fixed c' {
> > #@(map
> > (lambda (p)
> > #{ \modalTranspose c #(ly:make-pitch -1 p) \scale \pattern #})
> > (iota 8))
> > }
> >
> > pattern = {a c e g}
> > \fixed c' {
> > #@(map
> > (lambda (p)
> > #{ \modalTranspose c #(ly:make-pitch -1 p) \scale \pattern #})
> > (iota 8))
> > }
> >
> >
> > I was wondering if it was possible to to avoid this redundancy.
>
> whatever =
> #(define-music-function (pattern) (ly:music?)
> #{ \fixed c' {
> #@(map
> (lambda (p)
> #{ \modalTranspose c #(ly:make-pitch -1 p) \scale #pattern #})
> (iota 8))
> } #})
>
> \whatever {c d e f}
> \whatever {f e d c}
> \whatever {a c e g}
>
I tried the above code but without success. When I tried it few days ago I
was thinking there was some simple to solve problem and I didn't write you
immediately; I wanted to try to solve the problem by myself but I have not
been able to do it.
This is the complete code according what you wrote (I hope I didn't
introduce any errors):
\version "2.19.80"
scale = {c d e f g a b }
whatever =
#(define-music-function (pattern) (ly:music?)
#{ \fixed c' {
#@(map
(lambda (p)
#{ \modalTranspose c #(ly:make-pitch -1 p) \scale #pattern #})
(iota 8))
} #})
\whatever {c d e f}
\whatever {a c e g}
It looks that #(ly:make-pitch -1 p) inside this function does not decrease
the value of p. So the result is always the same _non transposed_ sequence.
There is also a strange (to me) problem with the octave that's too high ( I
have been able to solve it but I don't understand why it happens).
The same code outside the function works well:
\fixed c' {
#@(map
(lambda (p)
#{ \modalTranspose c #(ly:make-pitch -1 p) \scale {c d e f} #})
(iota 8))
}
What's the issue?
Thank you, g.
_______________________________________________
lilypond-user mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/lilypond-user