Autor Thema: Lilypond und Musikanalyse  (Gelesen 6503 mal)

ewipond

  • Member
Lilypond und Musikanalyse
« am: Sonntag, 10. Januar 2010, 02:41 »
Hallo allerseits!

Ich wollte mal fragen, ob man Lilypond dazu überreden kann, neben dem Notenausdruck auch statistische Angaben über das verwendete Notenmaterial anzugeben.(möglicherweise in einer extra-datei). Also z.B eine Liste der Noten/Pausen mit den dazugehörenden rythmischen Positionen oder der Grad der Polyphonie zu einem bestimmen Zeitpunkt usw. Das wäre für viele Aspekte einer Musikanalyse ganz schön hilfreich.

Ich weiß, dass es die Funktion \displayMusic gibt, die die ganze Noteneingabe strukturiert in der console darstellt, aber es ist mir leider nicht gelungen, das Prinzip dahinter zu durchschauen (es gibt da ziemlich viele Klammern).

Vieleicht gibt es schon vorhandene interne Funktionen, die eh schon eine Auflistung des Materials machen, die man aufrufen kann???

Einen schönen Tag noch!

ewipond

  • Member
Re:Lilypond und Musikanalyse
« Antwort #1 am: Montag, 1. Februar 2010, 15:06 »
Reinhold Kainhofer hat eine mega-clevere Lösung entwickelt:
Man kann offenbar eigene engraver schreiben, die zwar nichts an der Partitur ändern, dafür aber bestimmte Informationen an die Console senden!


Zitat
Thanks to Han-Wen's new scheme engraver possibilities, you can now implement
your own engraver (in this case it's simply a listener) in Scheme, which just
listens for all note and rest events and prints them out to the console as
they are caught (they are already in the correct time order)...

Attached is a simple example (actually just the regtest stripped down a little
and adjusted where needed), where I don't bother to nicely format the
duration/pitch. Currently, the duration/pitch is simply dumped as it is. In
your case, you probably want to print it out in a format that can be read into
your favorite statistics program. I'll leave that up to you ;-)

Cheers,
Reinhold

PS: Wouldn't it be great to have a simple statistics engraver, which only
counts how many notes, rests, articulations, etc. a score has?

und hier der Code:
\version "2.13.11"

%%%% Helper functions, which simply print out the observed rest/note events
%%%% in a nice format:
#(define (format-rest engraver event)
  (let* ((context (ly:translator-context engraver))
         (moment (ly:context-current-moment context))
         (duration (ly:event-property event 'duration)))
    ; TODO: Format the duration and the moment
    (ly:message "REST event of duration ~a at ~a\n" duration moment)
    ; or dump the whole event to see what information is available:
    ; (ly:message "REST event at ~a: ~a\n" moment event)
  )
)

#(define (format-note engraver event)
  (let* ((context (ly:translator-context engraver))
         (moment (ly:context-current-moment context))
         (duration (ly:event-property event 'duration))
         (pitch (ly:event-property event 'pitch)))
    ; TODO: Format the duration, pitch and the moment
    (ly:message "NOTE event of duration ~a, pitch ~a at ~a\n" duration pitch moment)
    ; or dump the whole event to see what information is available:
    ; (ly:message "NOTE event at ~a: ~a\n" moment event)
  )
)


%%%% The actual engraver definition: We just install some listeners so we
%%%% are notified about all notes and rests. We don't create any grobs or
%%%% change any settings.

\layout {
  \context {
    % I add this to the score, so all voices are caught. You can also only add
    % the engraver to selected voices to get the statistics split down.
    \Score
    \consists
    #(list
      (cons 'listeners
       (list
        (cons 'rest-event format-rest)
        (cons 'note-event format-note)
       ))
    )
  }
}


\relative c' {
  c8[ r c]
}



Grüße


ewipond

  • Member
Re:Lilypond und Musikanalyse
« Antwort #2 am: Montag, 1. Februar 2010, 15:10 »
Nachtrag: nachzulesen in der mailing-list unter "scheme-function to export a note-list?"

RobUr

  • Member
Re:Lilypond und Musikanalyse
« Antwort #3 am: Dienstag, 2. Februar 2010, 00:52 »
Hallo ewipond,

herzlichen Dank für die Beiträge! Ich war kürzlich selbst über Reinholds Mailing gestolpert und dachte so beim Überfliegen, dass es bei deinem Problem helfen könnte. Ich war nur gerade auf der Jagd nach einer Lösung für ein anderes Problem, wobei ich Posts, die 2.13.x betreffen, momentan noch eher unbewusst hintenan stelle …

Womöglich kann dir folgendes eventuell eine Zusatzhilfe sein: du kannst die Terminalausgabe selbstverständlich in eine Datei umleiten, um sie dann in Ruhe zu betrachten, ohne aus Versehen das Konsolenfenster zu schließen. Ruf’ Lily auf der Konsole (oder per Script) mit dem Parameter -dlogfile=dateiname auf, also z.B.
lilypond -dlogfile=analyse B-A-C-H.ly
=> erstellt "analyse.log", "B-A-C-H.ps" und "B-A-C-H.pdf"
– – – – – – – – – –
lilypond -dlogfile=analyse.log B-A-C-H.ly
=> erstellt "analyse.log.log", "B-A-C-H.ps" und "B-A-C-H.pdf"
In diesem Fall wird gleichzeitig die Terminalausgabe unterdrückt. Viele weitere Parameter anzeigen lassen mit: lilypond -help oder lilypond -dhelp

Wichtig zu wissen ist aber in jedem Fall die Möglichkeit, künftig eigene Engraver in Scheme schreiben zu können – sofern man damit vertraut ist. Ich bin darin nicht wirklich firm, aber es ergeben sich daraus völlig neue Ansätze, und Lilys „Umfang des Machbaren“ potenziert sich mit einem Mal! Ich werde wohl etwas mehr Zeit in scheme programming investieren müssen ;)  – dann nutzbar aber erst ab v2.14.

Grüße, Robert

ewipond

  • Member
Re:Lilypond und Musikanalyse
« Antwort #4 am: Dienstag, 2. Februar 2010, 22:07 »
Hallo Robert,

ja danke für den Tipp, ich hatte mich schon mit Unix rumgeschlagen( ohne davon wirklich Ahnung zu haben). Es würde gehen mit:

2>&1 | tee filename.txt
(inclusive terminal text)

>& filename.txt
(ohne terminal text)
beide nach lilypond  datei.ly

ist aber natürlich so viel praktischer.(mit Bindestrich zwischen -dlog und file.).

Der engraver ist wirklich super und läßt sich ohne Probleme erweitern, ich habe ihn z.B auf tie-events angesetzt - das geht prima. Das Beste ist, daß er zu jedem Event die aktuelle Score Position mitgeliefert - das war ja das größte Problem und zudem gibt es eine Unterscheidung zwischen normalen- und grace-notes.
Als nächstes werde ich die Infos formatieren und in python weiterverarbeiten.
Mal schauen was dabei rauskommt...

schönen Abend noch
Ewald

PS.: was ist denn mit den \paper formatierungen in 2.13 (after-title-space und so). Die sind wohl verschütt gegangen bis 2.14?

RobUr

  • Member
Re:Lilypond und Musikanalyse
« Antwort #5 am: Dienstag, 2. Februar 2010, 23:59 »
Zitat
was ist denn mit den \paper formatierungen in 2.13 (after-title-space und so). Die sind wohl verschütt gegangen bis 2.14?
Wie kommst du darauf? In 2.13 sind fast die gleichen und zusätzliche neue Funktionen zur Seitenformatierung eingebaut. after-title-space heißt neu aber after-title-spacing. Siehe englische Fassung der NR (die deutsche hinkt noch etwas hinterher).

Grüße, Robert

ewipond

  • Member
Re:Lilypond und Musikanalyse
« Antwort #6 am: Donnerstag, 4. Februar 2010, 16:10 »
Ok.alles klar. Ich hatte sogar ...spacing benutzt, leider mit der falschen Syntax  = x\mm.

Es ist schon verwirrend, wenn die Verwendung der Parameter in der NR nicht beschrieben ist, gerade wenn alle anderen Default-Beispiele auf dieser Seite das x\mm Format verwenden.

Grüße
Ewald

RobUr

  • Member
Re:Lilypond und Musikanalyse
« Antwort #7 am: Donnerstag, 4. Februar 2010, 23:32 »
Zitat
Ich hatte sogar ...spacing benutzt, leider mit der falschen Syntax  = x\mm.
Tatsächlich! Jetzt, wo du’s sagst, habe ich noch mal genauer draufgeschaut (das blüht ja vermutlich den meisten von uns angesichts der irgendwann kommenden Stable): after-title-spacing erwartet seit 2.13[.4?] eine Liste mit den Komponenten-Werte-Paaren space, padding, stretchability sowie minimum-distance! Das sieht dann folgendermaßen aus (für alle, die noch nicht in der englischen Liste geschmökert haben):
after-title-spacing = #'(
(spacing . a)
(padding . b)
(stretchability . c)
(minimum-distance . d)
)
mit Werten für a, b, c und d als positiv-negative Festkommazahl, z.B. (padding . -2.5).

Verwirrend ist in jedem Fall, dass die NR von fünf Komponenten spricht, aber nur vier aufgeführt sind! Es wurde schon auf Nabble gepostet, blieb aber bisher unbeantwortet. Mir ist auch noch nicht ganz klar, wie die Werte interpretiert werden: im Verhältnis zueinander (quasi als Faktoren) oder als absolute Werte in einer beliebigen Lilypondmaßeinheit? Wir müssen wohl vorerst experimentieren. In die deutsche Übersetzung hat es bisher keinen Eingang gefunden.

Man sollte im Hinterkopf behalten, dass die Dokumentation wie auch die Entwicklerversion Baustelle bis zur nächsten Stable ist.

Grüße, Robert

ewipond

  • Member
Re:Lilypond und Musikanalyse
« Antwort #8 am: Samstag, 6. Februar 2010, 12:41 »
Sieht so aus, als wären die Einheiten 'spaces', also der Abstand zwischen 2 Notenlinien. Damit hängt der absolute Abstand auch von der Staff-size ab. Das ist dann vielleicht auch der Grund für die Veränderung: Das ganze vertikale Layout wird dadurch skalierbar.

Die gleiche Syntax gilt wohl auch für alle eins-zwei-spacing Variablen, aber nicht für die x-margin, die nach wie vor mit x\mm bezeichnet werden.

Das Beste an 2.13 ist aber immer noch das q für Akkordwiederholungen!!

Grüße
Ewald

RobUr

  • Member
Re:Lilypond und Musikanalyse
« Antwort #9 am: Sonntag, 7. Februar 2010, 03:28 »
Zitat
Sieht so aus, als wären die Einheiten 'spaces', also der Abstand zwischen 2 Notenlinien. Damit hängt der absolute Abstand auch von der Staff-size ab.
… womit es wieder ein relativer Abstand ist. Selbstverständlich hängen viele Angaben von der staff-size ab, wodurch das ganze Layout überhaupt skalierbar wird. Aber das ist bereits in der aktuellen Programmversion implementiert. Es sei denn, man verwendet – sofern Lily es akzeptiert – absolute Maßeinheiten. Eine Übersicht, an welchen Stellen diese verarbeitet werden können, gibt es meines Wissens nicht. Es steht immer mal ein wenig dazu im entsprechenden Abschnitt zu den Eigenschaften, aber es ist nicht einheitlich dokumentiert. Nachvollziehbar ist, dass musikalische Abstände skalierbar in staff-spaces anzugeben sind. Bei den übrigen Längen ist es schwieriger, da wünschenswerterweise bestimmte Längen absolut und andere relativ festzulegen sein sollen. Es wird vorhersehbar – z.B. im Fall after-title-spacing und anderen Längen, die dieselbe Paarliste benutzen – erneut Diskussionen um Unterschiede zwischen spacing/padding und stretchability geben.

Zitat
Die gleiche Syntax gilt wohl auch für alle eins-zwei-spacing Variablen, aber nicht für die x-margin, die nach wie vor mit x\mm bezeichnet werden.
Bei denen sind immerhin die Default-Werte vermerkt! Bei vielen (vielleicht sogar allen?) „x-margin(s)“ würde ja die Angabe als #x, z.B. #20 für 20\mm genügen, da die Maßeinheit vorgegeben ist. Ich verlasse mich trotzdem nicht darauf und schreibe brav Wert + Einheit …


Jetzt sind wir mittlerweile vom Thema abgekommen. Es wird noch ausreichend Threads zu [vertical] Spacing wegen der neuen Engine geben!

Grüße, Robert