Autor Thema: Lautentabulatur übersetzen  (Gelesen 304 mal)

Hilflos-im-Code

  • Full Member
  • ***
  • Beiträge: 204
Lautentabulatur übersetzen
« am: Montag, 2. März 2020, 12:13 »
Ich habe gerade versucht, den Code von http://lilypond.1069038.n5.nabble.com/Entering-lute-tablature-td201234.html für \language "deutsch" umzumodeln.

Edit: Der Ursprungscode verträgt keine Buchstaben höher als g.

\version "2.19.50"

lute-tuning = \stringTuning <d, g, c f a d' g'>

tabtranslate =
#(define-music-function (pitches tuning music) (ly:music? pair? ly:music?)
   (define my-pitch (make-semitone->pitch (event-chord-pitches pitches)))
   (define string-number? (music-type-predicate 'string-number-event))
   (define semivec (list->vector (map ly:pitch-semitones tuning)))
   (map-some-music
    (lambda (m)
      (and (music-is-of-type? m 'note-event)
           (let* ((strs (ly:music-property m 'articulations))
                  (no
                   (case (length strs)
                     ((0) (ly:music-warning m "Needs string number") 1)
                     ((1) (ly:music-property (car strs) 'string-number))
                     (else (ly:music-warning m "Multiple string numbers")
                           (ly:music-property (car strs) 'string-number))))
                  (pit (ly:music-property m 'pitch))
                  (ab? (> (ly:pitch-notename pit) 4))
                  (num (+ (ly:pitch-steps pit) (if ab? 2 9)))
                  (no (if (and (integer? no)
                               (<= 1 no (vector-length semivec)))
                          (1- no)
                          (begin
                            (ly:music-warning (car strs)
                                              "Invalid string number")
                           0))))
             (set! (ly:music-property m 'pitch)
                   (my-pitch (+ (vector-ref semivec no) num)))
             m)))
    (tabChordRepeats music)))
%%

content =
\tabtranslate <c cis d dis e f fis g gis a bes b> \lute-tuning
{
  \set Staff.midiInstrument = "acoustic guitar (nylon)"
  \time 4/8
i\4 h\4
 
}

content = #(map-some-music
            (lambda (m)
             (and (music-is-of-type? m 'bar-check)
              #{ \bar "|" #}))
            content)

\score {
  \new Score \with { defaultBarType = "" }
  \new StaffGroup
  <<
    \new Staff \with { \clef "treble_8"
                       \omit StringNumber
                     } \content
    \new TabStaff \with { stringTunings = \lute-tuning } \content
  >>
  \layout {}
}

Aber wie dem auch sei. Gibt es eine Möglichkeit, das ganze in normalen Lilypondcode zu übersetzen, also Notennamen?
« Letzte Änderung: Montag, 2. März 2020, 12:33 von Hilflos-im-Code »

Hilflos-im-Code

  • Full Member
  • ***
  • Beiträge: 204
Antw:Lautentabulatur übersetzen
« Antwort #1 am: Montag, 2. März 2020, 14:44 »
Das ist keine richtige Lösung. Aber für den

- Bund h ein a' schreiben
- Bund i ein b' schreiben
- Bund k ein c'' schreiben,

dann geht es.

harm6

  • Hero Member
  • *****
  • Beiträge: 729
Antw:Lautentabulatur übersetzen
« Antwort #2 am: Montag, 2. März 2020, 22:04 »
Zitat
Edit: Der Ursprungscode verträgt keine Buchstaben höher als g.
Zitat
Das ist keine richtige Lösung. Aber für den

- Bund h ein a' schreiben
- Bund i ein b' schreiben
- Bund k ein c'' schreiben,

dann geht es.

Das ist das Problem auf welches David schon im angegeben link hingewiesen hat.
Zitat
At any rate, at least for lettered tabs this is a somewhat cure entry
method (of course, the "letters" start over since the order is
a b c d e f g a' b' c' d' ...).


Zitat
Gibt es eine Möglichkeit, das ganze in normalen Lilypondcode zu übersetzen, also Notennamen?

Hier verstehe ich nicht so ganz um was es Dir geht.
'tabtranslate' ist doch gerade dafür da die Eingabe nicht mit Notennamen zu machen.

Gruß,
  Harm

Hilflos-im-Code

  • Full Member
  • ***
  • Beiträge: 204
Antw:Lautentabulatur übersetzen
« Antwort #3 am: Dienstag, 3. März 2020, 07:55 »
Zitat
Gibt es eine Möglichkeit, das ganze in normalen Lilypondcode zu übersetzen, also Notennamen?

Hier verstehe ich nicht so ganz um was es Dir geht.
'tabtranslate' ist doch gerade dafür da die Eingabe nicht mit Notennamen zu machen.

Gruß,
  Harm

Ja, aber um danach anständige Noten zu machen. Z.B. die vierstimmige Fuge soll schöne vier Stimmen haben und nicht so ein Wirrwarr. Noten aus John Dowland Tabulaturen sehen ja nicht so aus, wie Davids Skript produziert.

Der Weg MIDI exportieren, in DAW oder Notensatzprogramm bearbeiten und via XML/MIDI nach Lilypond zurück importieren ist klar.

harm6

  • Hero Member
  • *****
  • Beiträge: 729
Antw:Lautentabulatur übersetzen
« Antwort #4 am: Mittwoch, 4. März 2020, 22:54 »
Zitat
Ja, aber um danach anständige Noten zu machen. Z.B. die vierstimmige Fuge soll schöne vier Stimmen haben und nicht so ein Wirrwarr. Noten aus John Dowland Tabulaturen sehen ja nicht so aus, wie Davids Skript produziert.

Nunja, ich kenne keine Noten in Dowland-Tabulaturen ;)
Das sind ja alles Übertragungen.

Eigentlich kann man doch in keiner historischen Tabulatur Stimmen erkennen. Im traditionellen Notensatz werden Stimmen ja u.a. durch verschieden ausgerichtete Hälse gekennzeichnet,
Das fehlt in Tabulaturen doch gänzlich.

Jede Übertragung ist somit auch insoweit Interpretation, als daß in der Mehrstimmigkeit die Töne verschiedenen Stimmen zugeordnet werden. Viele Zuordnung (wenn nicht alle) sind natürlich eindeutig.
Aber sie sind in der Tabulatur eben nicht explizit vorhanden.

Davids Script bildet meiner Ansicht nach nur nach was tatsächlich in der Tabulatur schon da ist, mehr nicht.

Du könntest natürlich versuchen die Tabulatur schon wie oben beschrieben interpretierend eingeben, d.h. etwas wie

\score {
  \new Score \with { defaultBarType = "" }
  \new StaffGroup
  <<
    \new Staff \with { \clef "treble_8"
                       \omit StringNumber
                     } << \contentI \contentII >>
    \new TabStaff \with { stringTunings = \lute-tuning } << \contentI \contentII >>
  >>
  \layout {}
}

Wobei contentI/II dann zwei verschieden Stimmen sind.
Ob das funktioniert habe ich nicht probiert und hab' momentan auch keine Zeit dazu, aber einen Versuch wäre es Wert.

Gruß,
  Harm

Hilflos-im-Code

  • Full Member
  • ***
  • Beiträge: 204
Antw:Lautentabulatur übersetzen
« Antwort #5 am: Freitag, 13. März 2020, 09:29 »
Letztlich sollte ich nicht fragen, weil ich festgestellt habe, dass das Eintippen via Musescore bei mir schneller geht.

Aber eine Sache beschäftigt mich doch. Das Skript  von David produziert ein MIDI mit Tönen. Exportiere ich aber Davids Datei als XML in Frescobaldi und importiere, dann erhalte ich eine Datei ohne Noten.

Liegt das in der Natur der Sache, oder müsste ich beim XML-Export mit Kommandozeile arbeiten? Und mit was für Befehlen?


harm6

  • Hero Member
  • *****
  • Beiträge: 729
Antw:Lautentabulatur übersetzen
« Antwort #6 am: Samstag, 14. März 2020, 10:48 »
Hallo,

LilyPond selbst kann (noch) nicht nach xml exportieren.
Es gibt verschiedene Ansätze das doch möglich zu machen. Der in Frescobaldi ist meines Wissens nach noch immer als eperimentell zu bezeichnen (wie die anderen auch).
Soweit es Frescobaldi betrifft kann ich Deine Beobachtungen bestätigen.

Obs anders geht hab ich nicht probiert.
Mein Wissen über ly<->xml Im/Export ist aber gering ...

Gruß,
  Harm