Deutsches Lilypond Forum (Archiv)

Allgemein => Allgemeine Diskussion => Thema gestartet von: pdqbach am Donnerstag, 10. Juli 2014, 14:09

Titel: Notensuche via lilypond
Beitrag von: pdqbach am Donnerstag, 10. Juli 2014, 14:09
Hallo liebe Experten,

habt Ihr Euch schon einmal mit dem Thema Notensuche per lilypond beschäftigt?

Ich möchte aus etwa 2000 Incipits, die in lilypond geschrieben sind eine Suche basteln. Möglich ist z.B. der Verzicht auf Rhythmus und einfach die Tonhöhen suchen lassen. Wenn man 6-8 Noten zur Suche eingibt sollte das reichen.
Nun suche ich eine Möglichkeit, aus den lilypond-Dateien mit möglichst wenig Aufwand die reinen Noteninfos zu extrahieren.

Also würde z.B. aus

\version "2.16.1"

#(set-global-staff-size 14)

\relative c'' {
  \clef treble
  \key bes\major
   \tempo "1. Moderato [Tutti]"
  \time 2/2
  \partial 8
  f8
  d32 es f8. d32 es f8. d16 es f4 bes8
  f16[ d es c] d bes bes'8
}

\relative c'' {
  \clef treble
  \key bes\major
   \tempo "1. Moderato [Solo]"
  \time 2/2
   d32 es f8. d32 es f8. d8 \grace c8 bes4 \times 2/3 {es16[ f g]}
    g8 f4 es8 es d r
}

einfach werden:

f d es f d es f d es f bes
f d es c d bes bes

d es f d es f d c bes es f g
g f es es d

Man könnte sogar überlegen, auf es und bes zu verzichten und nur die Stammtonhöhen zu vergleichen.

Irgendwelche Ideen, oder hat jemand schon so etwas gemacht?

HG

Pepe
Titel: Re: Notensuche via lilypond
Beitrag von: iugin am Donnerstag, 10. Juli 2014, 22:31
Hallo Pepe

Verständnisfrage: du möchtest irgendwie z.B. "c d e f" eingeben, und in einem Ordner alle Stücke suchen, die mit dieser Sequenz beginnen?
Wenn es so ist, man könnte es relativ schnell programmieren, aber nicht mit Lilypond sondern mit einer Programmiersprache (Java, C++, usw.).

Schönen Abend und einen lieben Gruss

Eugenio
Titel: Re: Notensuche via lilypond
Beitrag von: Arnold am Freitag, 11. Juli 2014, 08:47
Hallo,

als Programmiersprache kann man natürlich auch Scheme verwenden.
Für eine einfache Suche (vereinfachte Variante des UNIX-Befehls grep) habe ich mir bereits eine LY-Datei gebastelt.
Die Vorteile dieser Lösung (gegenüber MSWin-Funktionalität) sind die UTF8-Unterstützung und point-and-click im Ergebnis, daher benutze ich diese Routine des öfternen.

In deinem Fall wäre die Interpretation des zu durchkämmenden Dateiinhalts natürlich deutlich aufwändiger, vor allem wenn die Fundstellen auch noch mehrzeilig sind.

Ich melde mich wieder, wenn ich meine erwähnte LY-Datei parat habe. Die kann ja vielleicht als Rohling dienen.

Arnold
Titel: Re: Notensuche via lilypond
Beitrag von: pdqbach am Freitag, 11. Juli 2014, 16:23
Hallo Eugenio,

die Sache ist so aufgebaut:

In einer Datenbank liegen etwa 10.000 Werke (http://www.haynes-catalog.net, wenn Du mal schauen möchtest). Zu vielen Werken existieren Incipits, die als .ly (so wurden sie erzeugt) und .pdf (zur Ansicht) vorliegen.
Jetzt möchte ich, dass man in einer Suche "A C C B" eingeben kann und alle Werke angezeigt bekommt, die dies Muster enthalten.
Probleme sind Rhythmus, Sondernoten wie \grace und \times etc.

Bin ab morgen urlaubend, also nicht wundern, wenn ich evtl erst sehr verzögert antworte..

HG

Pepe
Titel: Re: Notensuche via lilypond
Beitrag von: iugin am Samstag, 12. Juli 2014, 18:28
Hallo Pepe

Ich hatte irgendwann ein Programm geschrieben, der Lilypond-Code transponiert, d.h. er kann die Noten finden.
Ich kann schauen, dass ich etwas bastle. Allerdings müssen alle ly-Files in einem Ordner sein (ist das einfachste).
Sonst kann man die Homepage durchsuchen, ist aber viel komplizierter.
Du brauchst aber Geduld, ebenfalls wegen Ferien (endlich!!!).
Und wenn Arnold schon was hat, kannst du sein Programm nutzen.

Liebe Grüsse und schöne Ferien

Eugenio
Titel: Re: Notensuche via lilypond
Beitrag von: Arnold am Montag, 14. Juli 2014, 08:37
Hallo,

hier nun mein »Gerüst«.

Gegen Ende der Datei kann man mit \grepDir eines oder mehrere Verzeichnisse angeben, in denen gesucht wird. Wenn nichts angegeben wird, dann wird im aktuellen Verzeichnis gesucht.

Mit \grepFilename gibt man an, welche Dateien zu durchsuchen sind. Dies ist die einzige Option, welche auch ein Platzhalterzeichen akzeptiert - das Sternchen, aber dieses nur ein einziges Mal. Aus »historischen Gründen« liest dieses Programm auch UTF16-Dateien und konvertiert diese zur weiteren Auswertung in UTF-8 um.

Mit \grepMask wird noch das oder die »Suchmuster« definiert. Wie ich schon erwähnt habe, wird mit einfachen String-Funktionen in jeder Zeile nach diesem Teilstring gesucht, daher sind auch hier keine Steuerzeichen zugelassen.

Die Auswertung wird letzlich »ähnlich dem Inhaltsverzeichnis« mit \markuplist { \simple-grep-results } aufgerufen. Die selbstdefinierte Text-Markup-Funktion erledigt also die ganze Auswertung.

Wie bereits erwähnt, muß man für diese hier gewollte Aufgabe aber sein eigenes Gegenstück zu string-contains programmieren, welches auch Folgezeilen mit auswerten muß, neben der Syntax-Analyse welche nicht relevante Zeichen »ausblendet«.

Viel Erfolg also erst einmal mit der Grundfunktionalität "Textstring suchen".

Arnold