Re: ly:pitch and string

2014-10-12 Thread Simon Albrecht

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

2014-10-12 Thread Paul Morris
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

2014-10-11 Thread 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.

-- 
David Kastrup


___
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user


Re: ly:pitch and string

2014-10-11 Thread Simon Albrecht

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

2014-10-11 Thread Paul Morris
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

2014-10-10 Thread Simon Albrecht

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

2014-10-10 Thread Paul Morris
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

2014-10-10 Thread Paul Morris
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

2014-10-10 Thread 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


Re: ly:pitch and string

2014-10-10 Thread Simon Albrecht

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