Allgemein > Fragen zu Funktionen

Wiederholungsklammer manuell setzen

<< < (3/5) > >>

xr:
Ok, dann gehts doch einfacher für jede Zahl:


--- Code: ---nr = ""

Klammer =
#(define-music-function
    (parser location num)
    (number?)

    (define liste '(list (volta "1")) )
   
    (set! nr (number->string num))
    (set-car! (cdr(car (cdr liste)))   nr)
       
    #{       
    \set Score.repeatCommands = # liste
    #})

--- Ende Code ---

Manuela:
Mein Scheme ist wieder eingerostet, aber das geht sicher noch einfacher.

Was genau macht dein Programm, hängt es num als String an die Liste?

xr:
Ich habe hier nochmal den vollständigen Code. Funktioniert leider immer noch nicht. Statt Klammer 1 und Klammer 2 wird 2x Klammer 2 ausgegeben. Außerdem bekomme ich folgende Fehlermeldung:
Warnung: Wiederholungsklammer bereits vorhanden, wird vorzeitig beendet


--- Code: ---\version "2.18.2"
         
#(define liste '(list (volta "1")) )         

txt = ""


Klammer =
#(define-music-function
    (parser location num)
    (number?)

    (set! txt (number->string num))
    (set-car! (cdr(car (cdr liste)))   txt)
       
    #{       
    \set Score.repeatCommands = # liste
    #})


Klammer-aus =
#(define-music-function
    (parser location)
    ()
   
    #{
     \set Score.repeatCommands = #'((volta #f))
    #})


\score {
 
    <<
      \relative {   
       
        \time 4/4 
       
        f'4 g f f 
       
        \Klammer 1
        e4 f e e
        g4 e e e
        f4 g f f 
        \Klammer-aus
        \bar ":|."
       
        \Klammer 2
        e4 f e e
        g4 e e e
        \Klammer-aus
       
        c4 d c c     
      }
 
    >>
 
}

--- Ende Code ---

xr:
So, Stunden später habe ich jetzt endlich eine funktionierende Lösung.
Von C oder Python kommend, kann einen Scheme echt in die Verzweiflung treiben.


--- Code: ---\version "2.18.2"


txt = ""

Klammer =
#(define-music-function
    (parser location num)
    (number?)
   
    (define listeA '(list  (volta "1")) )
    (define listeB '( (volta #f) (volta "2")) )
   
    (newline)
   
    ( if ( < num 2)
        (begin
            (set! txt (number->string num))
            (set-car! (cdr(car(cdr listeA))) txt)

            #{       
            \set Score.repeatCommands = #listeA
            #}
        )
   
        (begin
            (set! txt (number->string num))
            (set-car!(cdr(car(cdr listeB))) txt )
       
            #{       
            \set Score.repeatCommands = #listeB
            #}
        )   
    )
)

Klammer-aus =
#(define-music-function
    (parser location)
    ()   
    #{
     \set Score.repeatCommands = #'((volta #f))
    #})


\score { 
    <<
      \relative {   
       
        \time 4/4 
       
        f'4 g f f 
       
        \Klammer 1
        e4 f e e
        g4 e e e
        f4 g f  f 
        \Klammer-aus
        \bar ":|."
       
        \Klammer 3
        e4 f e e
        g4 e e e
        \Klammer-aus
       
        c4 d c c     
      }
 
    >>
}
[code]
--- Ende Code ---

xr:
Ah - ich werde doch noch wahnsinnig!
Dummerweise überschreibt immer die letzte Zahl alle Zahlen der vorangegangenen Klammern. Das fällt natürlich erst bei mehreren Klammern auf.

Weiß irgendwer warum das so ist? Werden Variablen an den Lilypond Parser übergeben und erst am Schluss ausgewertet? Oder was mache ich falsch?

Navigation

[0] Themen-Index

[#] Nächste Seite

[*] Vorherige Sete

Zur normalen Ansicht wechseln