Autor Thema: Helmholtz Ellis Vorzeichen  (Gelesen 5213 mal)

krach21

  • Member
Helmholtz Ellis Vorzeichen
« am: Donnerstag, 2. April 2015, 19:14 »
Hallo, liebe Notensatz-Pros,

hier ein Thema zu dem es schon einiges zu finden gibt, zu welchem das, was ich finden konnte, mich aber noch immer nicht ganz zufriedenstellt. Es geht um die Einbindung des wahrscheinlich höchstentwickeltsten System für die Notation von Mikrotonalität und Intonation. Dazu wird eine Font verwendet, die man hier herunterladen kann: http://www.marcsabat.com (da gibt es auch Hintergrundinfos)

Das System geht von einer pythagoreischen Stimmung aus (in der zwischen fis und ges z.B. ein phythagoreisches Komma liegt.) Alle Abweichungen von den reinen Quinten, (z.B. reine Terzen, Septimen usw.) werden mit zusätzlichen Zeichen beschreiben. Dabei kommt es vor, dass mehrere Vorzeichen vor einer Note zu schreiben sind.

Torsten Anders hat im laufe dieses Threads 2009 eine Lösung entwickelt:
http://lilypond.1069038.n5.nabble.com/Microtonal-Helmholtz-Ellis-notation-in-Lilypond-fine-tuning-td51110.html

Da gibt es dann ein kleines Problem mit dem vertikalen Spacing und man braucht einen extra Befehl, wenn man Akkorde schreiben will. Ich habe nun versucht auf grundlage des \chord-HE von Anders das Spacing mit Hilfe von Schriftgröße und Laufweite der Vorzeichen ein bisschen herunterzubrechen. Tatsächlich kann ich so ganz bequem mit der selben Funktion auch Akkorde schreiben, mit einem ausführlichen layout-Block ist auch das Spacing zu 95% in Ordnung und bis vor ein paar Tagen war ich mit dieser Lösung vollkommen glücklich:

#(define (modify-accidental note-grob prop-alist)
     (let ((accidental (ly:grob-object note-grob 'accidental-grob)))
      (if (not (null? accidental))
       (for-each
        (lambda (x)
         (ly:grob-set-property! accidental (car x) (cdr x)))
        prop-alist))))
#(define (accidental-text markup)
     (lambda (grob)
      (modify-accidental grob `((text . ,markup)))))
#(define-markup-command (stringsplit layout props str) (string?)
  (cond
    ((> (string-length str) 2) (interpret-markup layout props
      (markup #:halign 0.2 #:wordwrap( (substring str 0 1) (substring str 1 2) (substring str 2 3) ))))
    ((= (string-length str) 2) (interpret-markup layout props
      (markup #:halign -0.2 #:wordwrap( (substring str 0 1) (substring str 1 2) ))))
    ((= (string-length str) 1) (interpret-markup layout props
      (markup #:halign -1 #:wordwrap( (substring str 0 1)))))
  ))
H = #(define-music-function (parser location marktext mus) (string? ly:music?) 
  (set! (ly:music-property mus 'tweaks)       
   (acons 'before-line-breaking (accidental-text (markup
    #:override '(word-space . -0.4 )
    #:fontsize -2
    #:typewriter
    (#:stringsplit marktext)
    ))               
    (ly:music-property mus 'tweaks)))
  mus)
#(set-global-staff-size 20)
\layout { \context { \Score
\override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 1 32)
    \override Accidental #'stencil = #ly:text-interface::print
    \override Accidental #'text = #'(markup #:typewriter #:fontsize -2 "n")
}}
\paper{ myStaffSize = #20 #(define fonts (make-pango-font-tree "Sans" "Sans" "HE" (/ myStaffSize 20))) }
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


{ \H "n" c''! <\H "o" b'! \H "n" d''! > }
{ \H "n" c''! <\H "o" b'! \H "å" d''! > }

Leider reicht aber String als Datentyp zur Bezeichnung des Vorzeichens nicht aus. Man braucht auch Sonderzeichen, z.B. um zwei-Septimal-Kommas-auf/abwärts aus der Font herauszubekommen, muss man å,Å usw. eingeben.

Ich habe mich jetzt angemeldet, weil ich gesehen habe dass vor Jahren einige Diskutanten hier eine sehr gute Lösung für die Variation von der Laufweite von Text gefunden haben, die auch innerhalb von Scheme mit unicode arbeitet. (Ich habe das immer vermisst in Lilypond)
https://liarchiv.joonet.de/index.php?topic=1152.0

Genau mit der Laufweite habe ich versucht das Spacing der bis zu drei Vorzeichen in den Griff zu bekommen. Ich dachte, dass man das doch zusammenbasteln können müsste, krieg es aber nicht hin. Ich glaube da ist nur ein ganz kleiner Kniff nötig – aber keine Ahnung.
Vielleicht kann mir jemand hier damit helfen. Vielleicht interessiert sich auch jemand für eine richtig solide Implementation der HE-Accidentals einschließlich Spacing in Akkorden usw.


Ich freue mich sehr über Antwort
Gruß
Kostja
« Letzte Änderung: Freitag, 3. April 2015, 03:37 von Kostja »

harm6

  • Member
Re: Helmhotz Ellis Vorzeichen
« Antwort #1 am: Freitag, 3. April 2015, 00:37 »
Hallo Kostja,

willkommen hier im Forum.

Zitat
Dazu wird eine Font verwendet, die man hier herunterladen kann: http://www.marcsabat.com (da gibt es auch Hintergrundinfos)
Wenn man nach "The Helmholtz-Ellis Font" sucht.
Ich hab's mal angehängt.

Aus unbekanntem Grund kann ich jedoch "HE.ttf" nicht installiern. "HEmaestro.ttf" und "WW.ttf" funktionieren allerdings.

Daher bin ich mr nicht sicher, ob ich Dir hier weiterhelfen kann. Ich werd mal schauen, ob ich am Wochenende etwas faken kann.

Ein Punkt jedoch direkt.
Zitat
\override Accidental #'text = #'(markup #:typewriter #:fontsize -2 "n")
Dieses Apostroph muß natürlich weg ;)

Gruß,
  Harm
« Letzte Änderung: Freitag, 3. April 2015, 00:42 von harm6 »

krach21

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #2 am: Freitag, 3. April 2015, 13:34 »
Hallo Harm. Von Dir war ja auch die Funktion \char-size! Ich freue mich, dass Du schreibst.

Seltsam – die Fonts zu installieren ging bei mir immer problemlos. Die HE-maestro geht aber im zweifelsfall auch. Soweit ich das überblicke, unterscheiden sie sich nur äußerlich.

Bis bald,
Kostja

harm6

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #3 am: Samstag, 4. April 2015, 00:43 »
Hallo,

schau mal, ob Du mit folgendem Code klarkommst.

\version "2.19.17"

#(use-modules (ice-9 regex))

#(define (string->string-list strg)
   (map
     match:substring
     (list-matches
       "[a-z]|[0-9]|[å]|[Å]"
       strg)))
       
#(define-markup-command (stringsplit layout props str) (string?)
  (interpret-markup layout props
  #{ \markup \wordwrap #(string->string-list str) #}))
   
H =
#(define-music-function (parser location marktext mus) (string? ly:music?) 
    #{
      \tweak Accidental.before-line-breaking
        #(lambda (x)
         (ly:grob-set-property! x 'text
       #{
         \markup
           \override #'(word-space . -0.4)
           %\fontsize #-2
           \typewriter
           \stringsplit $marktext
       #}))
    $mus
    #})

\layout {
  \context {
    \Score
    \override SpacingSpanner #'base-shortest-duration = #(ly:make-moment 1 32)
    \override Accidental #'stencil = #ly:text-interface::print
  }
}

\paper {
  myStaffSize = #20
  #(define fonts
    (make-pango-font-tree
      "Sans"
      "Sans"
      "HE-Maestro"
      (/ myStaffSize 20)))
}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

{ \H "n" c''! <\H "o" b'! \H "n" d''! > }
{ \H "n" c''! <\H "o" b'! \H "åå" d''! > }
{ \H "n" c''! <\H "o" b'! \H "ÅÅ" d''! > }

Ich habe jetzt å und Å via regular expressions zugänglich gemacht. Damit kenn ich mich jedoch nicht besonders aus.
Falls es (sehr) viel mehr Sonderzeichen mit string-length>1 gibt muß man entweder die Syntax ändern oder sich ganz was anderes einfallen lassen.

Ich nehme an, daß Du 2.18.2 benutzt (Version bitte immer angeben).
Mach bitte ein upgrade auf die neueste devel-Version, ansonsten mußt Du dieses fürchterliche Gefummel mit halign wieder einführen (ist ja grauenhaft) ;)

Deine Funktionen/Definitionen habe ich gestrafft und die neueren Syntax-Möglichkeiten benutzt (die funktionieren auch schon mit 2.18)

png im Anhang.


HTH,
  Harm

krach21

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #4 am: Samstag, 4. April 2015, 06:14 »
Danke Dir! Sehr sehr nett.

Jetzt bin ich auch glücklicher Benutzer von 2.19.17.

Es wundert mich natürlich, dass ich nicht auch Dein Resultat rauskriege. Leider kommt nach wie vor:
(process:1276): Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()

Warnung: Kein Glyph für Zeichen U+EFFFFFFF in Schriftart »/Library/Fonts/HEmaestro.ttf«
usw. natürlich für jedes fremde Zeichen. Was ist denn da auf meinem Rechner anders als auf Deinem?
Sonst sind nur unwesentlich mehr Zeichen nötig. Die kann ich sicherlich dem "[a-z]|[0-9]|[å]|[Å]" einfach schnell hinzufügen.
Die Dringendsten wären für mich:
å / : < 3 4 0 æ * ; > 6 5 9 E F G H C B D e f g h c b d n o p q l k m v w x y t s u V W X Y T S U

Danke noch einmal!
Kostja

Die HE-maestro braucht wohl auch ein \fontsize #5 an Stelle der auskommentierten \fontsize #-2. Sie ist irgendwie kleiner als die normale HE.
« Letzte Änderung: Samstag, 4. April 2015, 06:34 von Kostja »

harm6

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #5 am: Samstag, 4. April 2015, 09:56 »
Zitat von: Kostja
Was ist denn da auf meinem Rechner anders als auf Deinem?
Ich bin auf Linux, Du hast einen Mac, iirc.

Aber wir können ja mal das Problem eingrenzen.

Öffne mal ein Terminal und gib ein:

Zitat
lilypond scheme-sandbox
Du siehst dann:
Zitat
GNU LilyPond 2.19.17
»<path-to>/scheme-sandbox.ly« wird verarbeitet
Analysieren...
guile>

Dann gib ein:
Zitat
(use-modules (ice-9 regex))
Du siehst:
Zitat
guile>

Dann gib ein:
Zitat
(define (string->string-list strg)
   (map
     match:substring
     (list-matches
       "[a-z]|[0-9]|[å]|[Å]"
       strg)))
Du siehst:
Zitat
guile>
Dann gib ein:
Zitat
(string->string-list "a2sådef345åsd2ÅsvÅ2s")
Du solltest folgendes sehen:
Zitat
("a" "2" "s" "å" "d" "e" "f" "3" "4" "5" "å" "s" "d" "2" "�\x85" "s" "v" "�\x85" "2" "s")
guile>


Klappt das bei Dir?


Gruß,
  Harm

krach21

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #6 am: Samstag, 4. April 2015, 11:31 »
Das geht. Es kommt zurück:
("a" "2" "s" "å" "d" "e" "f" "3" "4" "5" "å" "s" "d" "2" "?\x85" "s" "v" "?\x85" "2" "s")
« Letzte Änderung: Samstag, 4. April 2015, 11:35 von Kostja »

harm6

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #7 am: Samstag, 4. April 2015, 12:05 »
Schön, dann funktioniert 'string->string-list'.

Gib mal in ein neues LilyPond-file folgendes ein:

\version "2.19.17"

\paper {
  myStaffSize = #20
  #(define fonts
    (make-pango-font-tree
      "Sans"
      "Sans"
      "HE-Maestro"
      (/ myStaffSize 20)))
}

\markup "Å"
\markup \typewriter "Å"

Du solltest etwas wie das angehängte png erhalten.

Falls nicht gib mal in ein Terminal ein:
Zitat
lilypond -dshow-available-fonts &> fontslog.log
Und schau im dadurch geschaffenen file fontslog.log nach, ob HE-Maestro vorhanden ist.


-Harm

krach21

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #8 am: Samstag, 4. April 2015, 23:59 »
Das geht problemlos, die Font wird gefunden und Lilypond gibt den erwarteten Output. Das Problem beginnt mit Scheme. Ich bekomme auch einen analogen Fehler wenn ich den Code, der bei Dir funktioniert, mit einem ganz normalen Arial starte. Auch dort möchte er dann das Zeichen nicht finden.
Ich danke vielmals für Deine Mühe.
grusz

krach21

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #9 am: Freitag, 10. April 2015, 16:45 »
Unter Ubuntu bekomme ich, wenn ich bei Version 2.16.2 eingebe die HE font raus. Aber natürlich gibt es Fehler bei Deiner Lösung, weil die Funktionalitäten noch nicht vorhanden sind. Wenn ich Version 2.19.17 angebe, gibt es keinen Fehler, läuft perfekt durch, aber die Font ist einfach eine serifenlose Schriftart.

harm6

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #10 am: Montag, 13. April 2015, 01:30 »
Hallo Kostja,

die allerneuesten LilyPond-Versionen sind mit einem stark gepatchten cross-compiler erstellt, da vormals verwendete software total veraltet war. Es ist natürlich zu erwarten, daß manch ein bug noch zu finden ist.

Wir sollten also herausfinden, ob das Problem bei Dir und Deinem setup liegt oder ob LilyPond das Problem hat.

Zu diesem Zweck wäre es äußerst hilfreich wenn jemand mit einem Mac und einer LilyPond-version >= 2.19.17 sowie der HE-font meinen Code aus
https://liarchiv.joonet.de/index.php?topic=1950.msg10678#msg10678
kompilieren und das Ergebnis posten könnte.

RobUr?

Gruß,
  Harm
« Letzte Änderung: Montag, 13. April 2015, 02:44 von harm6 »

RobUr

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #11 am: Dienstag, 14. April 2015, 02:25 »
Hallo harm,

momentan habe ich nichts besseres anzubieten, außer dass Lily 2.18.2 + 2.19.18 (Mac OS X 10.4.11 [Tiger]) den HE-Font nicht finden und auf default sans zurückfallen:
Pango-WARNING **: Invalid UTF-8 string passed to pango_layout_set_text()
Warnung: Kein Glyph f"ur Zeichen U+EFFFFFFF in Schriftart >>/Library/Fonts/Microsoft/Verdana<<
Ich muss mich erstmal damit befassen, den Font für Lily verfügbar zu machen.

Sorry for no better news – Robert

krach21

  • Member
Re: Helmholtz Ellis Vorzeichen
« Antwort #12 am: Montag, 7. März 2016, 01:43 »
Liebe Leute,

es gibt jetzt endlich eine solide Lösung (programmiert von Graham Breed):
 ;D

https://bitbucket.org/x31eq/microlily/downloads

Herzlich
Kostja
« Letzte Änderung: Dienstag, 8. März 2016, 18:34 von Kostja »