define-music-function - Pitch+Notendauer als Argument übergeben - wie?

Begonnen von Manuela, Sonntag, 6. August 2017, 09:31

« vorheriges - nächstes »

Manuela

Hi,

in diesem Thread erhielt ich eine Lösung, wie ich Vorschlagsbögen horizontal 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.

Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

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''' }

Manuela

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?
Danke für eure Hilfe
viele Grüße
-- Manuela

Malte

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 gesehn, daß harm da was mit def-grace-function gemacht hat und hab das fortgeführt ;)

Manuela

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.  :)
Danke für eure Hilfe
viele Grüße
-- Manuela