Hallo erich,
Ich erhalte durch eine Anweisung der Form (write (ly:music-property musik 'pitch)) als Ausgabe beispielsweise #<Pitch cis' > ;
Wie muss ich den Ausdruck (ly:music-property musik 'pitch) weiter behandeln, um daraus den Notennamen cis' als reinen Text zu erhalten?
musik soll ein Ausdruck sein, für den (write (ly:music? musik) ) #t ergibt.
Malte's Frage nach einem Minimalbeispiel ist durchaus sinnvoll. Denn Deine weitere Erläuterung greift zu kurz:
musik = { cis }
#(write (ly:music? musik))Ergibt #t
Aber
musik = { cis }
#(write (ly:music-property musik 'pitch))ergibt: ()
!
Nichtsdestotrotz habe ich mich mal mit dem Problem beschäftigt.
Meines Wissens nach gibt es keine procedure die den Notennamen als Buchstaben/Zeichenfolge zurückgibt. Es ist auch nicht besonders sinnvoll "cis" zu haben, wenn man dieses "cis" intern weiterverarbeiten möchte, insbesondere wenn man bedenkt, daß ja auch andere Sprachen ins Spiel kommen können.
Der Notenname und die Oktave werden intern als ganze Zahlen verarbeitet, die möglichen Alterationen als Brüche.
Aber man kann es selber machen.
Da Du uns ein kompilierbares Beispiel vorenthalten hast, mußt Du jetzt mit meinem Coding leben.
Zahlreiche Kommentare im Code.
\version "2.18.0"
%% nicer output
#(use-modules (ice-9 pretty-print))
%% Define the language, if you want, needs to be a string:
which-language = "deutsch"
#(define which-language
;; tests whether 'which-language' is defined already and if 'which-language' is
;; part of 'language-pitch-names', see define-note-names.scm
;; if not, use 'default-language' (netherlands), see declarations-init.ly
(if (defined? 'which-language)
(let ((possible-languages (map car language-pitch-names)))
;(write possible-languages)
(if (member (string->symbol which-language) possible-languages)
which-language
(ly:error "specified language, \"~a\", does not exist"
which-language)))
default-language))
\language \which-language
#(define used-notenames
;; returns a subset of 'language-pitch-names', specified by which-language.
;; key and value are exchanged
;; i.e. the alist is from type '((pitch . name) ... )
(map
(lambda (e) (reverse-interval e))
(assoc-get
(string->symbol which-language)
language-pitch-names)))
%#(pretty-print used-notenames)
display-note-names =
#(define-music-function (parser loction music)(ly:music?)
"
Returns the unchanged music, writing the absolute notenames in terminal.
"
(music-map
(lambda (mus)
(if (music-is-of-type? mus 'note-event)
(begin
(let* ((pitch (ly:music-property mus 'pitch))
(pitch-octaves (ly:pitch-octave pitch))
(pitch-notename (ly:pitch-notename pitch))
(pitch-alteration (ly:pitch-alteration pitch))
;; create a pitch with alteration, name and
;; octave set to -1
;; this ensures the possibility to look it up in
;; 'used-notenames'
(p (ly:make-pitch -1 pitch-notename pitch-alteration))
(pitch-name-strg
(symbol->string (assoc-get p used-notenames)))
;; recreate the octave-notation
(octave-sign
(cond ((< pitch-octaves 0)
(string-concatenate
(make-list (1- (abs pitch-octaves)) ",")))
((= pitch-octaves 0) "'")
((> pitch-octaves 0)
(string-concatenate
(make-list (1+ (abs pitch-octaves)) "'")))))
(absolute-pitch-name
(string-append pitch-name-strg octave-sign)))
(newline)
(write pitch)
(format #t "\t~a" absolute-pitch-name)
mus))
mus))
music)
music)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% EXAMPLE
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\display-note-names
\relative c' {
c, cis d dis e f fis g gis a ais h c
cis d dis e f fis g gis a ais h c
cis d dis e f fis g gis a ais h c
h b a as g ges f e es d des c
\transpose c cis <c e g>
}Ergibt folgenden Terminaloutput:
#<Pitch c > c
#<Pitch cis > cis
#<Pitch d > d
#<Pitch dis > dis
#<Pitch e > e
#<Pitch f > f
#<Pitch fis > fis
#<Pitch g > g
#<Pitch gis > gis
#<Pitch a > a
#<Pitch ais > ais
#<Pitch b > h
#<Pitch c' > c'
#<Pitch cis' > cis'
#<Pitch d' > d'
#<Pitch dis' > dis'
#<Pitch e' > e'
#<Pitch f' > f'
#<Pitch fis' > fis'
#<Pitch g' > g'
#<Pitch gis' > gis'
#<Pitch a' > a'
#<Pitch ais' > ais'
#<Pitch b' > h'
#<Pitch c'' > c''
#<Pitch cis'' > cis''
#<Pitch d'' > d''
#<Pitch dis'' > dis''
#<Pitch e'' > e''
#<Pitch f'' > f''
#<Pitch fis'' > fis''
#<Pitch g'' > g''
#<Pitch gis'' > gis''
#<Pitch a'' > a''
#<Pitch ais'' > ais''
#<Pitch b'' > h''
#<Pitch c''' > c'''
#<Pitch b'' > h''
#<Pitch bes'' > b''
#<Pitch a'' > a''
#<Pitch aes'' > as''
#<Pitch g'' > g''
#<Pitch ges'' > ges''
#<Pitch f'' > f''
#<Pitch e'' > e''
#<Pitch ees'' > es''
#<Pitch d'' > d''
#<Pitch des'' > des''
#<Pitch c'' > c''
#<Pitch cis > cis
#<Pitch eis > eis
#<Pitch gis > gisHTH,
Harm