Notenköpfe SVG

Begonnen von erich, Donnerstag, 30. November 2017, 14:47

« vorheriges - nächstes »

erich

Hallo allen,

ich weiß zwar, wie man eigene Notenköpfe im PS-Format eingeben kann.

Wenn ich aber die Noten als SVG-Datei ausgebe, fehlen diese Köpfe; weiß einer oder eine, wie man eigene Notenköpfe in SVG handhaben kann?

Gruß
Erich













harm6

Hallo Erich,

kommt drauf an was genau Du mit "PS-Format" meinst bzw gemacht hast.
Bitte poste ein Code-Beispiel.

Gruß,
  Harm

erich

Hallo allen

Ich verstehe es zwar nicht aber der Zufall kam mir zur Hilfe:

Man kann mit Inkscape auch andere als SVG-Dateien einlesen; so versuchte ich die von LilyPond erzeugte PDF-Datei in Inkscape einzulesen und was geschah?

Die selbst entworfenen Notenköpfe wurden dargestellt dafür aber die anderen nicht. Ich habe dann auch noch die anderen selbst definiert und komme so zum gewünschten Ergebnis. Die Köpfe sind noch nicht ganz elegant aber das lässt sich später beheben.

Hier die Definition eines der Notenköpfe


halfSharp =
#(ly:make-stencil
    (list 'embedded-ps
        "gsave
        currentpoint translate
        newpath
        0.04 -.5 translate
        0 setgray
        1 1.041 moveto
        1.176 1.041 1.312 0.963 1.312 0.768 curveto
        1.312 0.697 1.297 0.627 1.277 0.557 curveto
        1.23 0.412 1.156 0.275 1.031 0.193 curveto
        0.824 0.057 0.602 -0.002 0.316 -0.002 curveto
        0.141 -0.002 0 0.084 0 0.275 curveto
        0 0.35 0.02 0.416 0.043 0.49 curveto
        0.086 0.631 0.16 0.768 0.285 0.854 curveto
        0.488 0.986 0.715 1.041 1 1.041 curveto
        closepath
        1 1.041 moveto
        fill
     1 setgray
        0.934 0.943 moveto
        1.082 0.943 1.195 0.877 1.195 0.717 curveto
        1.195 0.658 1.18 0.604 1.164 0.545 curveto
        1.125 0.424 1.062 0.315 0.961 0.244 curveto
        0.793 0.135 0.609 0.088 0.375 0.088 curveto
        0.23 0.088 0.113 0.154 0.113 0.315 curveto
        0.113 0.373 0.129 0.428 0.148 0.486 curveto
        0.184 0.608 0.246 0.717 0.348 0.787 curveto
        0.516 0.9 0.703 0.943 0.934 0.943 curveto
        closepath
        0.934 0.943 moveto
        fill   
        0 .2 0 setrgbcolor
        1.062 0.85 moveto
        1.203 0.881 1.137 0.756 0.91 0.576 curveto
        0.684 0.393 0.383 0.225 0.242 0.197 curveto
        0.102 0.166 0.172 0.291 0.398 0.471 curveto
        0.625 0.654 0.922 0.822 1.062 0.85 curveto
        0.652 0.522 lineto
        closepath
        1.062 0.85 moveto
        fill
        grestore")
    (cons 0 1.28)
    (cons -.5 .5)
    )



In der noch nicht automatisierten Anwendung verwende ich dann die Definition

hS =
{ \once \override NoteHead.stencil = \halfSharp }


und schreibe dann beispielsweise

{ \hS c'}


gruß
Erich

harm6

Du könntest make-path-stencil verwenden.

Eine reduzierte Fassung Deines Notenkopfes, klappt auch als svg:


\version "2.19.65"

\markup \stencil
#(make-path-stencil
'(moveto  1 1.041
   curveto  1.176 1.041 1.312 0.963 1.312 0.768
   curveto  1.312 0.697 1.297 0.627 1.277 0.557
   curveto  1.23 0.412 1.156 0.275 1.031 0.193
   curveto  0.824 0.057 0.602 -0.002 0.316 -0.002
   curveto  0.141 -0.002 0 0.084 0 0.275
   curveto  0 0.35 0.02 0.416 0.043 0.49
   curveto  0.086 0.631 0.16 0.768 0.285 0.854
   curveto  0.488 0.986 0.715 1.041 1 1.041
   closepath
   )
0.1 1 1 #f)


Gruß,
  Harm

erich

Hallo Harm,

danke dir vielmals

Ich habe mir mal
https://groups.google.com/forum/#!topic/musicnotation/AUTPSrVBBoU
angeschaut.

Ich habe den Eindruck, das löst nicht mein Problem: ich möchte nicht an eine Note etwas anhängen, sondern den Notenkopf selbst abändern, das scheint aber mit make-path-stencil nicht zu gehen.

Im Übrigen:
In LilyPond hat man einen Mechanismus zur Verwendung verschiedener Versetzungszeichen; einen analogen Mechanismus für Notenköpfe vermisse ich jedoch; da müsste man wohl die interne Datenstruktur erweitern. Wie siehst du das?

Inzwischen kann ich die Noten in einer 15-stufigen Scala automatisch ausgeben. Ich muss jetzt noch das syntonische Komma als Versetzungszeichen integrieren, dann kann ich in Preetzise fast alles in reiner Stimmung notieren und als Midi ausgeben

Gruß
Erich

Malte

Zitat von: erich am Samstag,  2. Dezember 2017, 09:54
Ich habe den Eindruck, das löst nicht mein Problem: ich möchte nicht an eine Note etwas anhängen, sondern den Notenkopf selbst abändern, das scheint aber mit make-path-stencil nicht zu gehen.
Hast du es ausprobiert?halfSharp = #(make-path-stencil ...)klappt hier ohne Probleme.
Zitat
Im Übrigen:
In LilyPond hat man einen Mechanismus zur Verwendung verschiedener Versetzungszeichen; einen analogen Mechanismus für Notenköpfe vermisse ich jedoch; da müsste man wohl die interne Datenstruktur erweitern. Wie siehst du das?
Die Frage richtet sich zwar an Harm, ich antworte trotzdem mal: Wonach hast du gesucht, was genau brauchst du? Es gibt verschiedenste Arten, Notenköpfe zu ändern, generell, abhängig von Tonhöhen u. a. (Stichwörter: \easyHeadsOn, \override NoteHead.style, Schlagzeugnotation, Prozeduren als NoteHead.stencil/color/before-line-breaking, ...) Was für Änderungen an der internen Struktur schweben dir vor bzw. was ist noch nicht repräsentiert?
Zitat
Inzwischen kann ich die Noten in einer 15-stufigen Scala automatisch ausgeben. Ich muss jetzt noch das syntonische Komma als Versetzungszeichen integrieren, dann kann ich in Preetzise fast alles in reiner Stimmung notieren und als Midi ausgeben
Kleine Verständnisfragen: Sind dis und es bei dir jetzt das Gleiche? Und kann man der Notation ansehen, welches jeweils der ,,ursprüngliche" Ton ist, von dem aus in syntonischen Kommata versetzt wird?

harm6

Malte hat zwar gerade schon geantwortet, hier trotzdem was ich schreiben wollte:

Zitat
Ich habe den Eindruck, das löst nicht mein Problem: ich möchte nicht an eine Note etwas anhängen, sondern den Notenkopf selbst abändern, das scheint aber mit make-path-stencil nicht zu gehen.

Dieser Eindruck ist falsch make-path-stencil returniert einen verwenbaren stencil genauso wie (ly:make-stencil (list 'embedded-ps ... ) ...), nur das er auch in svg funktioniert.

Zitat
In LilyPond hat man einen Mechanismus zur Verwendung verschiedener Versetzungszeichen; einen analogen Mechanismus für Notenköpfe vermisse ich jedoch;

Wozu auch? Wird in klassischer Notation nicht verwendet.
Braucht man es trotzdem wie bei Dir (eine andere Anwendung wäre Unterrichtsliteratur für Anfänger) ist es einfach zu kodieren.

Zitatda müsste man wohl die interne Datenstruktur erweitern.

Eine kleiner override mit call-back-function kann das regeln:

\version "2.19.65"

stil =
#(make-path-stencil
'(moveto  1 1.041
   curveto  1.176 1.041 1.312 0.963 1.312 0.768
   curveto  1.312 0.697 1.297 0.627 1.277 0.557
   curveto  1.23 0.412 1.156 0.275 1.031 0.193
   curveto  0.824 0.057 0.602 -0.002 0.316 -0.002
   curveto  0.141 -0.002 0 0.084 0 0.275
   curveto  0 0.35 0.02 0.416 0.043 0.49
   curveto  0.086 0.631 0.16 0.768 0.285 0.854
   curveto  0.488 0.986 0.715 1.041 1 1.041
   closepath
   )
0 1 1 #t)

minusStil = #(stencil-with-color stil '(0.5 0 0))
defaultStil = #(stencil-with-color stil '(0.75 0 0))
plusStil = #(stencil-with-color stil '(1 0 0))

altStils =
  \override NoteHead.stencil =
    #(lambda (grob)
      (let* ((cause (ly:grob-property grob 'cause))
             (pitch (ly:prob-property cause 'pitch))
             (alt (ly:pitch-alteration pitch)))
      ;; stencil-translate is needed, because the path-stencil uses
      ;; not accurate values, too lazy to fix it there...
      (ly:stencil-translate-axis
        (case alt
          ((-1/2) minusStil)
          ((0) defaultStil)
          ((1/2) plusStil)
          (else stil))
        -0.5 Y)))


{
  \altStils
  ces'' c'' cis''
  ces' c' cis'
}

(Siehe auch das Extending Manual 2.7 Callback functions)

Natürlich ist hier nur die Methode gezeigt, deshalb habe ich mich auf unterschiedliche Farben beschränkt. Komplett andere stencils würden jedoch ebenfalls funktionieren.


HTH,
  Harm

erich

Hallo Malte

ZitatKleine Verständnisfragen: Sind dis und es bei dir jetzt das Gleiche? Und kann man der Notation ansehen, welches jeweils der ,,ursprüngliche" Ton ist, von dem aus in syntonischen Kommata versetzt wird?

Ja, dis und es haben dieseibe Tonhöhe, sie sind miteinander temperiert; das führt zu einer etwas engeren Quinte als 3/2 ; man gewinnt so den Vorteil, dass man alle Töne der 15-stufigen Scala durch Quintfortschreitungen erzeugen kann; man kann sie gewissermaßen in Quintschritten abzählen und kann so auch das syntonische Komma erreichen. Wenn ich soweit mit allem in LilyPond durchbin, werde ich es auf meiner Homepage darstellen.

Gruß
Erich

erich

#8
Hallo Harm, hallo Malthe und hallo allen, die noch mitlesen

Ich habe überall in den Definitionen der Notenköpfe ly:make-stencil durch ly:make-path-stencil ersetzt aber das funktionierte bei mir nicht; habe ich da etwas falsch verstanden?

Gruß
Erich

P.S. Ich erhalte jedoch, wenn ich LilyPond mit der Optopn -V laufen lasse die Mitteilung.
Unbound variable: ly:make-path-stencil


Ich habe dann das "ly:" weggelassen und erhielt dann die Fehlermeldung.
Wrong number of arguments to #<procedure make-path-stencil (path thickness x-scale y-scale fill)>

Dem werrde ich nun nachgehen

Malte

Ich möchte auch dich noch einmal an Minimalbeispiele und Versionsangaben erinnern (s. a. hier). In dem Google-Groups-Post, den du oben verlinkt hast, steht doch sogar, daß die Sache erst ab 2.19.xx geht ... In diesem Thread hast du noch nichts dazu gesagt, aber aufgrund der Umstände sage ich nach einem Blick in die trübe Glaskugel, daß du eine ältere Version verwendest.

erich

Hallo Malte

ich habe mein System vor einpaar Tagen neu aufgesetzt
Version 2.19.80
ok?

Gruß
Erich

Malte

#11
Dann liegts an was anderem, ein Minimalbeispiel wär hilfreich. Da du mit 125 Beiträgen schon länger in diesem Forum unterwegs bist, sollte dir dieses Vorgehen eigentlich bekannt sein. Ich helfe ja gern, aber nur, wenn auch ein Mindestmaß an Vorarbeit deinerseits geleistet wird. Denn gerade die letzten Posts haben ja gezeigt, daß offensichtlich die Glaskugel nicht das richtige Vorgehen ist.

Edit: Ich habe übrigens das Gefühl, daß du weder harms und meine Antworten, die make-path-stencil und nicht ly:make-path-stencil verwenden, noch die von dir zuletzt gepostete Fehlermeldung Wrong number of arguments to #<procedure make-path-stencil (path thickness x-scale y-scale fill)> ernsthaft gelesen hast. Ich erkläre dir jetzt nicht ohne deinen Code zu sehen, warum diese Meldung auf deinen Fehler hinweist, weil ich deinen Fehler ja nur erahnen aber nicht wissen kann.

Tatsächlich kannst du in Verbindung mit harms Post sehr gut selbst drauf kommen, wo dein Fehler vermutlich liegt.

erich

Hallo Malte,

einerseits verstehe ich, dass ein Kontext sehr hilfreich sein kann. Da ich aber ein doch sehr weitgehend modifiziertes System entwickle, halte ich es nicht immer für zumutbar, dass sich jemand darin vertieft; darum schrieb ich auch, dass ich es, wenn es fertig ist, auf meiner Homepage zur Kenntnis geben werde.

Dass ich make-path-stensil  mit  ly:make-path-stensil übertragen hatte, war eine Flüchtigkeit von mir, die ich dann ja auch als solche kenntlich gemacht hatte.

ZitatIch habe dann das "ly:" weggelassen und erhielt dann die Fehlermeldung.
Code: [Auswählen]

Wrong number of arguments to #<procedure make-path-stencil (path thickness x-scale y-scale fill)>

Dem werde ich nun nachgehen

Ich gaubte damit deutlich gemacht zu haben, dass ich dem zunächst nachzugehen habe.

Aber vielleicht darf ich mich wieder an euch wenden, wenn ich damit nicht zurande komme.

Gruß
Erich


Malte

Zitat von: erich am Samstag,  2. Dezember 2017, 16:01
Hallo Malte,

einerseits verstehe ich, dass ein Kontext sehr hilfreich sein kann. Da ich aber ein doch sehr weitgehend modifiziertes System entwickle, halte ich es nicht immer für zumutbar, dass sich jemand darin vertieft; darum schrieb ich auch, dass ich es, wenn es fertig ist, auf meiner Homepage zur Kenntnis geben werde.
Du hast recht, es ist nicht zumutbar, sich erst in so etwas zu vertiefen. Allerdings haben viele deiner Teilprobleme erst einmal nichts mit deinem Gesamtsystem zu tun, weshalb man ein von diesem System unabhängiges Minimalbeispiel erwarten kann. Es ist nämlich genauso wenig zumutbar, selbst ein solches Beispiel konstruieren zu müssen. Und zumindest ich möchte meine Lösungsvorschläge in der Regel an Code testen; ich mag es nicht, einen Rat zu geben, von dem sich nachher herausstellt, daß er zum geschilderten Problem nicht paßt oder aber passen würde, selbst aber mangels Testmöglichkeit fehlerhaft umgesetzt ist und nachgebessert werden muß.

Zitat
Ich gaubte damit deutlich gemacht zu haben, dass ich dem zunächst nachzugehen habe.

Aber vielleicht darf ich mich wieder an euch wenden, wenn ich damit nicht zurande komme.
Das hatte ich wohl falsch verstanden, sorry. Ja, darfst du natürlich, aber erwarte bitte von mir in Zukunft ohne Angabe von LilyPond-Version und Minimalbeispiel keine Hilfe mehr. Es tut mir leid, daß ich da jetzt so drastisch werde, weil ich eigentlich gern helfe.* Und bei neuen Forumsmitgliedern habe ich auch nichts dagegen, zwei, drei Mal drauf hinzuweisen. Aber auf Dauer finde solche Diskussionen einfach ermüdend.

*nur für den Fall, daß ein anderer Eindruck entstanden sein sollte: Ja, auch dir mit Preetzise. Anliegen müssen mir nicht unbedingt gefallen, damit ich mich drum kümmere ;)

erich

Hallo Harm

Zitat
\version "2.19.65"

\markup \stencil
#(make-path-stencil
'(moveto  1 1.041
   curveto  1.176 1.041 1.312 0.963 1.312 0.768
   curveto  1.312 0.697 1.297 0.627 1.277 0.557
   curveto  1.23 0.412 1.156 0.275 1.031 0.193
   curveto  0.824 0.057 0.602 -0.002 0.316 -0.002
   curveto  0.141 -0.002 0 0.084 0 0.275
   curveto  0 0.35 0.02 0.416 0.043 0.49
   curveto  0.086 0.631 0.16 0.768 0.285 0.854
   curveto  0.488 0.986 0.715 1.041 1 1.041
   closepath
   )
0.1 1 1 #f)


was ist das für eine Postscript-Konvention? ich finde dazu keine Anleitung

Gruß
Erich