[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Help with mixing Scheme and Music

From: Carl Sorensen
Subject: Help with mixing Scheme and Music
Date: Wed, 22 Dec 2010 22:13:45 -0700


I'm trying to get an easier method of creating custom string tunings (see

I'd like to do one of the following:

\makeStringTuning #'violin-tuning <g d' a' e''>


violin-tuning = \makeStringTuning <g d' a' e''>

I can get the chord music argument into a scheme function if I define
\makeStringTuning as a music function, but I'm having a hard time getting
the stringTuning (which is a Scheme list) out.

I've tried

makeStringTuning =
#(define-music-function (parser location tuning chord)
   (symbol? ly:music?)
   (let* ((ev-chord (car (extract-named-music chord 'EventChord)))
          (pitches (event-chord-pitches ev-chord)))
     (set! tuning pitches)
     (make-music 'SequentialMusic 'void #t)))

but this fails because it tries to set tuning to pitches, instead of setting
the passed symbol to pitches.  Plus I think it fails because the symbol that
is passed in hasn't yet been defined in the top-level context.

I've also tried

makeStringTuning =
#(lambda (chord)
  (let* ((ev-chord (car (extract-named-music chord 'EventChord)))
         (pitches (event-chord-pitches ev-chord)))
    (display pitches)
    (display (defined? (string->symbol tuning)))
    (set! (string->symbol tuning) pitches)    (make-music 'SequentialMusic
'void #t)))

mychord = { 
 <g d' a' e''>
violinTuning = \makeStringTuning \mychord
#(display violinTuning)

But this doesn't work because of delayed evaluation -- violinTuning is just
set to be the lambda function, not the lambda function applied to the

Any tips on how to resolve this?



reply via email to

[Prev in Thread] Current Thread [Next in Thread]