Re: ly:pitch and string
Hello Paul, Thanks for your help in improving the helper functions; however, ‘inverting’ string-append and cond seems to be based on a misunderstanding. It needs to be %% \version 2.19.12 \language deutsch pitch-to-key-string-german = #(define-scheme-function (parser location p mode) (ly:pitch? string?) (let* ((major? (equal? mode major)) (nn (ly:pitch-notename p)) (nn-string (if major? (list-ref '(C D E F G A H) nn) (list-ref '(c d e f g a h) nn))) (alt (ly:pitch-alteration p)) (alt-num (+ 2 (* 2 (ly:pitch-alteration p (alt-string (list-ref '(eses es is isis) alt-num)) ;pitch without octave (na (cons nn alt)) ;helper functions for exceptions in german note naming (test (lambda (n a) (equal? na (cons n a (exc (lambda (ma mi) (if major? ma mi (string-append nn-string (cond ((test 2 -1) (exc Eses eses)) ((test 2 -1/2) (exc Es es)) ((test 5 -1) (exc Asas asas)) ((test 5 -1/2) (exc As as)) ((test 6 -1/2) (exc B b)) (else alt-string) (cond ((test 2 -1) (exc Eses eses)) ((test 2 -1/2) (exc Es es)) ((test 5 -1) (exc Asas asas)) ((test 5 -1/2) (exc As as)) ((test 6 -1/2) (exc B b)) (else (string-append nn-string alt-string) newTonic = disis' newTonicString = \pitch-to-key-string-german \newTonic major % for testing: #(display (string-append in- newTonicString)) \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% and then it works very well. Yours, Simon ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Simon Albrecht-2 wrote Thanks for your help in improving the helper functions; however, ‘inverting’ string-append and cond seems to be based on a misunderstanding. It needs to be Ah, I see now... I was missing the forest for the trees. Cheers, -Paul -- View this message in context: http://lilypond.1069038.n5.nabble.com/ly-pitch-and-string-tp167397p167491.html Sent from the User mailing list archive at Nabble.com. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Simon Albrecht simon.albre...@mail.de writes: Hello, consider the following setup: %% \version 2.19.12 newTonic = d newTonicString = d \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% For easy handling of different transpositions the ‘destination pitch’ is stored in a variable. It is of type ly:pitch?. At the same time, I want to flag the output file with the key to which the music has been transposed, and for this I need the destination pitch notename as a string. I’d like to avoid having to synchronise newTonic and newTonicString manually, but I’ve been unable to find a convenient way to convert one into the other. Can anybody help? (use-modules (scm display-lily)) newTonicString = #(value-lily-string newTonic parser) Note that the conversion requires the availability of parser since it depends on the current value of the note name language. -- David Kastrup ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Hello David, thanks, that’s exactly the kind of brief and elegant solution I was hoping for. Yours, Simon Am 11.10.2014 um 16:52 schrieb David Kastrup: Simon Albrecht simon.albre...@mail.de writes: Hello, consider the following setup: %% \version 2.19.12 newTonic = d newTonicString = d \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% For easy handling of different transpositions the ‘destination pitch’ is stored in a variable. It is of type ly:pitch?. At the same time, I want to flag the output file with the key to which the music has been transposed, and for this I need the destination pitch notename as a string. I’d like to avoid having to synchronise newTonic and newTonicString manually, but I’ve been unable to find a convenient way to convert one into the other. Can anybody help? (use-modules (scm display-lily)) newTonicString = #(value-lily-string newTonic parser) Note that the conversion requires the availability of parser since it depends on the current value of the note name language. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Simon Albrecht-2 wrote well, now I did try and make a function for german note names, which discerns major and minor also. Actually it works – the transposition is applied correctly and there are no unexpected messages – but at testing there seemed to be a memory problem: from some point onwards, the newTonicString was always eses regardless of the input. Perhaps the computer and I ought to go to sleep. (what a mad sentence that is…) And thanks again for your input, Paul. Hi Simon, I see David has showed a better way. In the meantime, with a few edits, I got your function working, so just for good measure, here it is. Cheers, -Paul %% \version 2.19.12 \language deutsch pitch-to-key-string-german = #(define-scheme-function (parser location p mode) (ly:pitch? string?) (let* ((major? (equal? mode major)) (nn (ly:pitch-notename p)) (nn-string (if major? (list-ref '(C D E F G A H) nn) (list-ref '(c d e f g a h) nn))) (alt (ly:pitch-alteration p)) (alt-num (+ 2 (* 2 (ly:pitch-alteration p (alt-string (list-ref '(eses es is isis) alt-num)) ;pitch without octave (na (cons nn alt)) ;helper functions for exceptions in german note naming (test (lambda (n a) (equal? na (cons n a (exc (lambda (ma mi) (if major? ma mi (string-append nn-string (cond ((test 2 -1) (exc Eses eses)) ((test 2 -1/2) (exc Es es)) ((test 5 -1) (exc Asas asas)) ((test 5 -1/2) (exc As as)) ((test 6 -1/2) (exc B b)) (else alt-string) newTonic = disis' newTonicString = \pitch-to-key-string-german \newTonic major % for testing: #(display (string-append in- newTonicString)) \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% -- View this message in context: http://lilypond.1069038.n5.nabble.com/ly-pitch-and-string-tp167397p167425.html Sent from the User mailing list archive at Nabble.com. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
ly:pitch and string
Hello, consider the following setup: %% \version 2.19.12 newTonic = d newTonicString = d \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% For easy handling of different transpositions the ‘destination pitch’ is stored in a variable. It is of type ly:pitch?. At the same time, I want to flag the output file with the key to which the music has been transposed, and for this I need the destination pitch notename as a string. I’d like to avoid having to synchronise newTonic and newTonicString manually, but I’ve been unable to find a convenient way to convert one into the other. Can anybody help? I thought of #(ly:parser-include-string ), but it returns an entire sequential music expression instead of the pitch alone, plus it’s difficult to wrap. And the other direction (compute newTonicString from newTonic) seems to be even more difficult to achieve. TIA, Simon ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Simon Albrecht-2 wrote I’d like to avoid having to synchronise newTonic and newTonicString manually, but I’ve been unable to find a convenient way to convert one into the other. Can anybody help? Hi Simon, This does the job. I might contribute it to the LSR. Cheers, -Paul %% \version 2.19.12 pitch-to-string = #(define-scheme-function (parser location p) (ly:pitch?) (let* ((pitch-num (ly:pitch-notename p)) (pitch-string (list-ref '(C D E F G A B) pitch-num)) (alt-num (+ 2 (* 2 (ly:pitch-alteration p (alt-string (list-ref '(-Double-Flat -Flat -Sharp -Double-Sharp) alt-num)) (note-string (string-append pitch-string alt-string))) ;; for testing: ;; (display note-string) note-string)) newTonic = d newTonicString = \pitch-to-string \newTonic % for testing: % #(display (string-append in- newTonicString)) \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% -- View this message in context: http://lilypond.1069038.n5.nabble.com/ly-pitch-and-string-tp167397p167404.html Sent from the User mailing list archive at Nabble.com. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Just for fun, another version, more compact, probably more cryptic: %% \version 2.19.12 pitch-to-string = #(define-scheme-function (parser location p) (ly:pitch?) (string-append (list-ref '(C D E F G A B) (ly:pitch-notename p)) (list-ref '(-Double-Flat -Flat -Sharp -Double-Sharp) (+ 2 (* 2 (ly:pitch-alteration p)) newTonic = d newTonicString = \pitch-to-string \newTonic % for testing: #(display (string-append in- newTonicString)) \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% -- View this message in context: http://lilypond.1069038.n5.nabble.com/ly-pitch-and-string-tp167397p167405.html Sent from the User mailing list archive at Nabble.com. ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Hello Paul, thanks a lot! I thought along the same lines also, but (1) my less elegant coding and (2) the complications brought along by German notenames would’ve made it too tedious. Am 10.10.2014 um 23:44 schrieb Paul Morris: Just for fun, another version, more compact, probably more cryptic: %% \version 2.19.12 If you were to make an LSR snippet, I’d suggest making a Dutch version pitch-to-string-dutch also (same for both coding variants): pitch-to-string = #(define-scheme-function (parser location p) (ly:pitch?) (string-append (list-ref '(C D E F G A B) (ly:pitch-notename p)) (list-ref '(-Double-Flat -Flat -Sharp -Double-Sharp) replace the latter list by '(eses es is isis) (+ 2 (* 2 (ly:pitch-alteration p)) newTonic = d newTonicString = \pitch-to-string \newTonic % for testing: #(display (string-append in- newTonicString)) \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% Best regards, Simon ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user
Re: ly:pitch and string
Hello again, well, now I did try and make a function for german note names, which discerns major and minor also. Actually it works – the transposition is applied correctly and there are no unexpected messages – but at testing there seemed to be a memory problem: from some point onwards, the newTonicString was always eses regardless of the input. Perhaps the computer and I ought to go to sleep. (what a mad sentence that is…) And thanks again for your input, Paul. Best, Simon Am 10.10.2014 um 23:55 schrieb Simon Albrecht: Hello Paul, thanks a lot! I thought along the same lines also, but (1) my less elegant coding and (2) the complications brought along by German notenames would’ve made it too tedious. Am 10.10.2014 um 23:44 schrieb Paul Morris: Just for fun, another version, more compact, probably more cryptic: %% \version 2.19.12 If you were to make an LSR snippet, I’d suggest making a Dutch version pitch-to-string-dutch also (same for both coding variants): pitch-to-string = #(define-scheme-function (parser location p) (ly:pitch?) (string-append (list-ref '(C D E F G A B) (ly:pitch-notename p)) (list-ref '(-Double-Flat -Flat -Sharp -Double-Sharp) replace the latter list by '(eses es is isis) (+ 2 (* 2 (ly:pitch-alteration p)) newTonic = d newTonicString = \pitch-to-string \newTonic % for testing: #(display (string-append in- newTonicString)) \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %% Best regards, Simon ___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user %% \version 2.19.12 \language deutsch pitch-to-key-string-german = #(define-scheme-function (parser location p mode) (ly:pitch? string?) (let* ((major? (equal? mode major)) (nn (ly:pitch-notename p)) (nn-string (if major? (list-ref '(C D E F G A H) nn) (list-ref '(c d e f g a h) nn))) (alt (ly:pitch-alteration p)) (alt-num (+ 2 (* 2 (ly:pitch-alteration p (alt-string (list-ref '(eses es is isis) alt-num)) ;pitch without octave (na (cons nn alt)) ;helper function for exceptions in german note naming (exc (lambda (n a ma mi) ((equal? na (cons n a)) (if major? ma mi) (cond (exc 2 -1 Eses eses) (exc 2 -1/2 Es es) (exc 5 -1 Asas asas) (exc 5 -1/2 As as) (exc 6 -1/2 B b) (else (string-append nn-string alt-string) newTonic = disis' newTonicString = \pitch-to-key-string-german \newTonic major % for testing: #(display (string-append in- newTonicString)) \bookOutputSuffix #(string-append in- newTonicString) \score { \transpose c \newTonic { c' } } %%___ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user