Deutsches Lilypond Forum (Archiv)
Notationsspezifisch => Noten für Schlagzeug => Thema gestartet von: Bienenmann am Samstag, 12. April 2014, 13:02
-
Hallo Leute,
ich bin neu bei Lilypond, da aber LaTeX erfahrungen vorliegen, hoffe ich, einen schnellen Einstieg zu schaffen.
Derzeit plagt mich folgendes:
Notenset für Cajon, hier gibt es verschiedene "Instrumente" oder halt Anschlagarten:
bass, tone, slap, tip. Bei tip soll kein Notenkopf erscheinen und der Hals auch kürzer sein.
Version Lilypond: 2.14.2 (unter Ubuntu 13.04), derzeit bearbeitet mit Frescobaldi
Der Thread "Style für Cajon" (https://archiv.lilypondforum.de/index.php?topic=1012.0 (https://archiv.lilypondforum.de/index.php?topic=1012.0)) hat mir schon sehr geholfen.
Ich beginne mit der alist
Code: [Auswählen]
#(define cajonset '(
(bass la #f -1)
(tone default #f 0)
(slap diamond #f 1)
(tip cross #f 1)
))
Hierzu finde ich allerdings in der Anleitung keine genaue Beschreibung der einzelnen Elemente. Unter den Drumnoten ist auch nur ca. obiges Beispiel.
Ich habs mir jetzt so herausgearbeitet:
bass = Name des Instruments, la = Notenkopf (nach welcher liste??), #f = Bezugslinie im Notensystem?, -1 = Lage zur Bezugslinie
Wo steht das in der Anleitung? Ich bin zu doof das zu finden ;)
Jetzt zum Hauptproblem: ich kann per
Code: [Auswählen]
\once \override NoteHead #'transparent = ##t
%oder
\override NoteHead #'transparent = ##t
EINEN Notenkopf unsichtbar machen oder alle für alle Instrumente ab hier. Wie kann ich dies aber in der obigen Definition nur für "tip" generell machen (und den Hals kürzen)?
Auch für einen Hinweis auf das Anleitungskapitel wäre ich dankbar!
Grüße,
Sönke
(P.S. Ich hab mal die ganze Datei angehängt, mit der ich gerade experimentiere.)
-
Hallo Sönke,
willkommen im Forum.
Version Lilypond: 2.14.2 (unter Ubuntu 13.04), derzeit bearbeitet mit Frescobaldi
Hmm, 2.14.2 ist antik, wir sind jetzt bei 2.18.2/2.19.4
Ich empfehle baldiges upgrade auf die aktuelle stable, d.h. 2.18.2
Du hast Glück, daß ich 2.14.2 noch auf dem Rechner habe.
Hierzu finde ich allerdings in der Anleitung keine genaue Beschreibung der einzelnen Elemente. Unter den Drumnoten ist auch nur ca. obiges Beispiel.
Ich habs mir jetzt so herausgearbeitet:
bass = Name des Instruments, la = Notenkopf (nach welcher liste??), #f = Bezugslinie im Notensystem?, -1 = Lage zur Bezugslinie
Leider gibts da nicht hinreichend Doku zu. :(
Die Notenköpf kannst Du hier (http://lilypond.org/doc/v2.18/Documentation/notation/the-feta-font#default-notehead-glyphs) betrachten. (mit doku für 2.18 verlinkt)
Falls Du einen verwenden willst nehme den letzten Teil der Bezeichnung, d.h. z.B. cross aus noteheads.s2cross.
Das rot markierte ist dafür da mögliche Artikulationen anzugeben. -> drumpitch-init.scm
Das nächste für die Linie im Notensystem.
Wo steht das in der Anleitung? Ich bin zu doof das zu finden
Nö, bist Du nicht. Ich hab jetzt nicht in der neuesten Doku gesucht, aber in der für 2.14.2 gibt es keine.
Zum Hauptproblem, schau mal, ob Du mit folgendem klar kommst:
\version "2.14.2"
drumPitchNames =
#(append '(
(bass . bass)
(tone . tone)
(slap . slap)
(tip . tip )
)
drumPitchNames
)
#(define cajonset '(
(bass la #f -1)
(tone default #f 0)
(slap diamond #f 1)
(tip cross #f 1)
))
%% The general function
affectSomeDrumNote =
#(define-music-function (parser location drum-note-name unbeamed-beamed-length)
(symbol? list?)
"
Makes only the via 'drum-note-name' specified NoteHead transparent.
Shortens/lengthens its Stem.
First value of the list for 'unbeamed-beamed-length' will affect unbeamed
Stems, the second beamed Stems.
"
#{
\override NoteHead #'after-line-breaking =
#(lambda (grob)
(let* ((cause (ly:grob-property grob 'cause))
(drum-type (ly:prob-property cause 'drum-type))
(stem (ly:grob-object grob 'stem))
(beam (ly:grob-object stem 'beam))
(stem-length (if (null? beam) (ly:grob-property stem 'length))))
(if (eq? drum-type $drum-note-name)
(begin
(ly:grob-set-property! grob 'transparent #t)
;; unbeamed Stems will be affected equally by adding a value to
;; the calculated default
(if (null? beam)
(ly:grob-set-property! stem 'length
(+ stem-length (car $unbeamed-beamed-length))))
;; beamed Stems will be shortened according her duration
(ly:grob-set-nested-property! stem '(details beamed-lengths)
(cadr $unbeamed-beamed-length))))))
#})
%% Specified for 'tip
%% default values would be '(0 (3.26 3.5 3.6))
affectTip = \affectSomeDrumNote #'tip #'(-1 (2.26 2.5 2.6))
SystemFuerCajon = {
\override Staff.StaffSymbol #'line-positions = #'(0)
% Das ist notwendig. Wenn nicht angegeben, wird die Taktlinie zu kurz!
\override Staff.BarLine #'bar-extent = #'(-1 . 1)
%\override Staff.BarLine #'bar-size = #5
\affectTip
}
\new DrumStaff \with {
\consists "Parenthesis_engraver"
} <<
\time 4/4
\numericTimeSignature
\set DrumStaff.drumStyleTable = #(alist->hash-table cajonset)
\SystemFuerCajon
\drummode{
\stemUp
bass16 tone slap tip
tip tip tip
tip slap
tip
\noBeam tip1
\noBeam tip2
\noBeam tip4
\noBeam tip8
\noBeam tip16
\noBeam tip32
}
>>
Falls Du ein upgarde machst (unbedingt!!) oder jemand es mit einer höheren Version kompilieren möchte, so bitte convert-ly drüberlaufen lassen!
Gruß,
Harm
-
Btw, Du hattest denselben Beitrag auch in der Rubrik "Fragen zu Funktionen" gestellt.
Bitte lösche ihn da.
Gruß,
Harm
-
Hi,
danke für die Antwort.
Aus den Paketquellen kommt grad kein neueres mehr und nächste Woche installiere ich den PC neu. Dann kommt eine andere Linuxdistri und auch das neueste Lilypond drauf.
Das Beispiel compiliert mit einem Fehler:
(if (eq? drum-type $drum-note-name)
generiert die Meldung:
Systeme erstellen.../tmp/frescobaldi-MawHXd/tmpLs9Ztr/document.ly:38:14: While evaluating arguments to eq? in expression (eq? drum-type $drum-note-name):
/tmp/frescobaldi-MawHXd/tmpLs9Ztr/document.ly:38:14: Unbound variable: $drum-note-name
Wurde mit dem Return-Code 1 beendet.
Ich hab dann in der folgenden Zeile noch die zwei $-Zeichen eingefügt.
#(define-music-function (parser location $drum-note-name $unbeamed-beamed-length)
Damit gehts dann und ist so wie ich wollte.
Großes Danke, ich geh den Code mal in Ruhe durch und versuche alles zu verstehen.
Gruß,
Sönke
(Den anderen Post konnte ich nicht selbst löschen, ich hab den Mod informiert.)
-
Das Beispiel compiliert mit einem Fehler:
(if (eq? drum-type $drum-note-name)
generiert die Meldung:
Systeme erstellen.../tmp/frescobaldi-MawHXd/tmpLs9Ztr/document.ly:38:14: While evaluating arguments to eq? in expression (eq? drum-type $drum-note-name):
/tmp/frescobaldi-MawHXd/tmpLs9Ztr/document.ly:38:14: Unbound variable: $drum-note-name
Wurde mit dem Return-Code 1 beendet.
Ich hab dann in der folgenden Zeile noch die zwei $-Zeichen eingefügt.
#(define-music-function (parser location $drum-note-name $unbeamed-beamed-length)
Damit gehts dann und ist so wie ich wollte.
Hier läuft was schief!!
Mein Code kompliliert mit 2.14.2 einwandfrei!
In 2.14.2 waren die $-Zeichen nötig. Sie mußten im Aufruf dem Namen der Variablen vorangestellt werden.
Deine Fehlermeldung bekommt man nur, falls man meinen Code unverändert (d.h. ohne convert-ly bemutzt zu haben oder ohne die $-Zeichen manuell entfernt zu haben) mit einer höheren Version zu kompilieren versucht.
Welche Version benutzt den Dein Frescobaldi denn?
Gruß,
Harm
-
Ja, mein Fehler.
Ich hab die Frage seit letzter Woche offen und gestern erst meine Freischaltung fürs Forum bekommen. Offenbar habe ich seitdem doch noch ein Upgrade bekommen.
Somit habe ich Version 2.16.0 (gerade abgefragt) und jetzt auch die Funktion von convert.ly gelernt. Also, Dein Code + convert.ly funktioniert.
Vielen Dank für die Hilfe!
Gruß,
Sönke
-
Das ist leider üblich (wahrscheinlich gibts einfach nicht genug Leute, die sich damit auskennen und auch noch Zeit dafür haben, die Pakete aktuell zu halten). Ich würde dir raten, immer das neueste LilyPond von Hand zu installieren (bzw. das neueste stabile, also gerader Versionsnummer wie 2.18.x, irgendwann 2.20.x), das geht wunderbar unkompliziert und gerade 2.18 hat meiner Meinung nach einige echt nützliche und schöne Verbesserungen gebracht ;)