Autor Thema: Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend  (Gelesen 3860 mal)

Bienenmann

  • Gast
Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend
« 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) 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.)

harm6

  • Gast
Re: Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend
« Antwort #1 am: Samstag, 12. April 2014, 14:47 »
Hallo Sönke,

willkommen im Forum.

Zitat
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.

Zitat
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 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.

Zitat
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

harm6

  • Gast
Re: Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend
« Antwort #2 am: Samstag, 12. April 2014, 14:50 »
Btw, Du hattest denselben Beitrag auch in der Rubrik "Fragen zu Funktionen" gestellt.
Bitte lösche ihn da.

Gruß,
  Harm

Bienenmann

  • Gast
Re: Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend
« Antwort #3 am: Samstag, 12. April 2014, 17:24 »
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:
Zitat
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.)

harm6

  • Gast
Re: Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend
« Antwort #4 am: Samstag, 12. April 2014, 19:49 »
Zitat von: Bienenmann
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

Bienenmann

  • Gast
Re: Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend
« Antwort #5 am: Sonntag, 13. April 2014, 08:41 »
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

fugenkomponist

  • Gast
Re: Cajon Drumstaff -> Notenköpfe für ganzes Instrument ausblend
« Antwort #6 am: Sonntag, 13. April 2014, 13:10 »
Zitat von: Bienenmann link=topic=1731.msg9579#msg9579 date=1397316270Aus den Paketquellen kommt grad kein neueres mehr[/quote
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 ;)