Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: Manuela am Sonntag, 6. August 2017, 09:31

Titel: define-music-function - Pitch+Notendauer als Argument übergeben - wie?
Beitrag von: Manuela am Sonntag, 6. August 2017, 09:31
Hi,

in diesem Thread erhielt ich eine Lösung, wie ich Vorschlagsbögen horizontal (https://lilypondforum.de/index.php/topic,109.0.html) gestalten kann.

Jetzt möchte ich das ganze gerne in einer Musikfunktion verpacken, schaffe es jedoch nicht.

So soll das Ergebnis ausschauen

\version "2.19.62"

myGrace = #(define-music-function (mus)(ly:pitch?)
             #{
               \slashedGrace $mus \laissezVibrer
             #}
             )

{ s8 \myGrace f'' c'''4 }


allerdings stört das s8 vorher bzw. weiß ich nicht, wie ich die Dauer der Vorschlagnote einstellen kann.

Diese Version

\version "2.19.62"

myGrace = #(define-music-function (mus)(ly:music?)
             #{
               \slashedGrace $mus _ \laissezVibrer
             #}
             )

{ \myGrace f''8 c''' }


ergibt diese Fehlermeldung

Starte lilypond-windows.exe 2.19.62 [myGrace2.ly]...
Processing `myGrace2.ly'
Parsing...
myGrace2.ly:5:35: error: syntax error, unexpected '_'
               \slashedGrace $mus
                                  _ \laissezVibrer

myGrace2.ly:9:3: error: error in #{ ... #}
{
  \myGrace f''8 c''' }
myGrace2.ly:9:3: error: music function cannot return ##<unspecified>
{
  \myGrace f''8 c''' }

Interpreting music...
Preprocessing graphical objects...
Finding the ideal number of pages...
Fitting music on 1 page...
Drawing systems...
Layout output to `./tmp-lilypond-XAYJ19'...
Converting to `myGrace2.pdf'...
Deleting `./tmp-lilypond-XAYJ19'...
fatal error: failed files: "/myGrace2.ly"
Wurde mit dem Return-Code 1 beendet.


Dieser Code

\version "2.19.62"

myGrace = #(define-music-function (mus dauer)(ly:pitch? number?)
             #{
               \slashedGrace $mus $dauer \laissezVibrer
             #}
             )

{ \myGrace f'' #8 c'''4 }


ergibt die Fehlermeldung
Starte lilypond-windows.exe 2.19.62 [myGrace4.ly]...
Processing `myGrace4.ly'
Parsing...
G:/Lilypond/_Klavierheft/forlum/myGrace4.ly:5:35: error: syntax error, unexpected NUMBER_IDENTIFIER
               \slashedGrace $mus
                                  $dauer \laissezVibrer

myGrace4.ly:9:3: error: error in #{ ... #}
{
  \myGrace f'' #8 c'''4 }

myGrace4.ly:9:3: error: music function cannot return ##<unspecified>


{
  \myGrace f'' #8 c'''4 }

Interpreting music...
Preprocessing graphical objects...
Finding the ideal number of pages...
Fitting music on 1 page...
Drawing systems...
Layout output to `./tmp-lilypond-eIUUCV'...
Converting to `myGrace4.pdf'...
Deleting `./tmp-lilypond-eIUUCV'...
fatal error: failed files: "myGrace4.ly"
Wurde mit dem Return-Code 1 beendet.

Titel: Antw:define-music-function - Pitch+Notendauer als Argument übergeben - wie?
Beitrag von: Malte am Sonntag, 6. August 2017, 10:24
Du brauchst für Dauern nicht number?, sondern ly:duration?. Es geht ja bei Dauern um viel mehr, z. B. ist \breve..*2/3 (eine doppelpunktierte Doppelganze um Faktor 2/3 skaliert) auch eine gültige Dauer, aber sicher keine number? ;)\version "2.19.62"

myGrace =
#(define-music-function (ton dauer) (ly:pitch? ly:duration?)
   #{
     \slashedGrace $ton $dauer \laissezVibrer
   #})

{ \myGrace f''8 c'''4 }

Das hat aber den Nachteil, daß du immer eine Dauer angeben mußt. Besser ist vermutlich harms Variante, per def-grace-function eine eigene, nunja, grace-function zu bauen:\version "2.19.62"

startMyGrace =  {
  \startSlashedGraceMusic
  <>-#(make-music 'LaissezVibrerEvent)
}

stopMyGrace =  {
  \stopSlashedGraceMusic
}

myGrace =
#(def-grace-function startMyGrace stopMyGrace
   (_i "Create an acciaccatura with horizontal slur from the following music expression"))

{ \myGrace f''8 c''' }
Titel: Antw:define-music-function - Pitch+Notendauer als Argument übergeben - wie?
Beitrag von: Manuela am Sonntag, 6. August 2017, 10:40
Danke Malte.

Zitat von: Malte am Sonntag,  6. August 2017, 10:24
Das hat aber den Nachteil, daß du immer eine Dauer angeben mußt. Besser ist vermutlich harms Variante, per def-grace-function eine eigene, nunja, grace-function zu bauen:\version "2.19.62"

startMyGrace =  {
  \startSlashedGraceMusic
  <>-#(make-music 'LaissezVibrerEvent)
}

stopMyGrace =  {
  \stopSlashedGraceMusic
}

myGrace =
#(def-grace-function startMyGrace stopMyGrace
   (_i "Create an acciaccatura with horizontal slur from the following music expression"))

{ \myGrace f''8 c''' }

Diese Lösung muss ich jetzt irgendwie überlesen haben, so ist es natürlich perfekt  :)

Update: kann ich stopMyGrace nicht sparen und durch die eingebaute Funktion stopSlashedGraceMusic ersetzen?
Titel: Antw:define-music-function - Pitch+Notendauer als Argument übergeben - wie?
Beitrag von: Malte am Sonntag, 6. August 2017, 10:44
Zitat von: Manuela am Sonntag,  6. August 2017, 10:40
Diese Lösung muss ich jetzt irgendwie überlesen haben, so ist es natürlich perfekt  :)
Naja, in der Form stand sie noch nicht da (per LaissezVibrerEvent den in die grace-function mit einzubauen), nur hab ich halt im anderen Thread (https://lilypondforum.de/index.php/topic,109.msg698.html#msg698) gesehn, daß harm da was mit def-grace-function gemacht hat und hab das fortgeführt ;)
Titel: Antw:define-music-function - Pitch+Notendauer als Argument übergeben - wie?
Beitrag von: Manuela am Sonntag, 6. August 2017, 10:46
Zitat von: Malte am Sonntag,  6. August 2017, 10:44
Naja, in der Form stand sie noch nicht da (per LaissezVibrerEvent den in die grace-function mit einzubauen),

Dann hab' ich's doch nicht überlesen.  :)