lilypond-user
[Top][All Lists]
Advanced

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

Re: Cannot set MIDI tempo Programmatically


From: Mats Bengtsson
Subject: Re: Cannot set MIDI tempo Programmatically
Date: Mon, 17 Dec 2007 11:54:00 +0100
User-agent: Thunderbird 2.0.0.5 (X11/20070716)

If this looked very magic, please take a look at the section "Building complicated functions", which shows a systematic way to figure out what functions to use.

  /Mats

Gilles THIBAULT wrote:
I think you have to rewrite your own \tempo function.
I try this which seems to works.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\version "2.11.34"
\include "english.ly"

tempoAlt = #(define-music-function (parser location Duration Tempo) (string? string?)
(
 let*(
 (ptindex (string-index Duration #\. ))
   ;; position of "." in "4." for exemple. #f if no ".".
 (ptnumber 0)
(val (string->number (if ptindex (substring Duration 0 ptindex) Duration)))
   ;; val = 1 2 4 8 ... (without the ".")
 (dur (ly:intlog2 val))
   ;; dur = 0 1 2 3 ... (need for ly:make-duration)
 (t (string->number Tempo))
)
  ;; find the number of "." in Duration
   (while ptindex (
 begin
  (set! ptnumber (1+ ptnumber))
  (set! ptindex (string-index Duration #\.  (1+ ptindex) ))
  )
 )
  ;; see tempo in ly-syntax-constructors.scm line 81
  (tempo parser location (ly:make-duration dur ptnumber 1 1) t )
))




GRtempoMark =
#(define-music-function (parser location Padding Text Duration PerMinute)
                                      ( number? string? string?  string?)
 #{
  \once \override Score.MetronomeMark #'transparent = ##t
  \tempoAlt $Duration $PerMinute

  \once \override Score.RehearsalMark #'self-alignment-X = #left
 \once \override Score.RehearsalMark #'padding = #$Padding
   \mark \markup
   {
     \bold $Text
     (
     \smaller \general-align #Y #DOWN \note #$Duration #1
     =
     \smaller \general-align #Y #DOWN \italic "ca."
     \general-align #Y #DOWN $PerMinute
     )
   }
 #}
)


\score
{
\new Staff \relative c'
{
 \GRtempoMark #2 #"Andante" "2." "30"
 c'4
}
\layout {}
\midi {}
}



%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
original message :

I'm having a problem setting the MIDI tempo from within a function. When I
compile the file below, I get the error message:

GNU LilyPond 2.11.35
Processing `test.ly'
Parsing...
<string>:3:11: error: syntax error, unexpected SCM_TOKEN, expecting DIGIT or
UNSIGNED or DURATION_IDENTIFIER
   \tempo
          #lilyvartmpb = \lilyvartmpc
test.ly:26:0: error: errors found, ignoring music expression

\relative c'

It seems that lilypond is complaining that the parameter Duration is not a number. I've tried various ways of getting around this, but it doesn't seem
to work.  If I comment out the \tempo line, I get a music file (
http://www.nabble.com/file/p14336623/test.png test.png ) with the
appropriate tempo marking, but it has no effect on the MIDI tempo.

Any ideas?

Cheers,

Garry.

-------------------------------------------------------------------------------------
\version "2.11.35"
\include "english.ly"

GRtempoMark =
#(define-music-function (parser location Padding Text Duration PerMinute) ( number? string? string? string?)
 #{
   \once \override Score.MetronomeMark #'transparent = ##t
   \tempo #$Duration = $PerMinute

   \once \override Score.RehearsalMark #'self-alignment-X = #left
   \once \override Score.RehearsalMark #'padding = #$Padding
   \mark \markup
   {
     \bold $Text
     (
     \smaller \general-align #Y #DOWN \note #$Duration #1
     =
     \smaller \general-align #Y #DOWN \italic "ca."
     \general-align #Y #DOWN $PerMinute
     )
   }
 #}
)

\relative c'
{
 \GRtempoMark #2 #"Andante" #"4" #"60"
 c4
}
--
View this message in context: http://www.nabble.com/Cannot-set-MIDI-tempo-Programmatically-tp14336623p14336623.html
Sent from the Gnu - Lilypond - User mailing list archive at Nabble.com.



_______________________________________________
lilypond-user mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/lilypond-user




_______________________________________________
lilypond-user mailing list
address@hidden
http://lists.gnu.org/mailman/listinfo/lilypond-user

--
=============================================
        Mats Bengtsson
        Signal Processing
        Signals, Sensors and Systems
        Royal Institute of Technology
        SE-100 44  STOCKHOLM
        Sweden
        Phone: (+46) 8 790 8463                         
       Fax:   (+46) 8 790 7260
        Email: address@hidden
        WWW: http://www.s3.kth.se/~mabe
=============================================





reply via email to

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