lilypond-user
[Top][All Lists]
Advanced

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

Re: Microtonal midi output


From: brahim.pro
Subject: Re: Microtonal midi output
Date: Sun, 09 May 2021 14:39:18 +0000

My bad sorry for the spam. Looks fine to me I found my silly mistake.

Thanks

Brahim

‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
On Sunday 9 May 2021 16:07, Jacques Menu <imj-muzhic@bluewin.ch> wrote:

> Hello Brahim,
>
> What do you mean by ‘run this script’?
>
> JM
>
> > Le 9 mai 2021 à 15:58, brahim.pro brahim.pro@protonmail.com a écrit :
> > Hello,
> > Thanks for the feedback.
> > Actually I cannot manage to run this script.
> > I tried this for example:
> > \version "2.22.0"
> > tuneMIDI =
> > #(define-music-function (scale music) (list? ly:music?)
> > (let ((copy (ly:music-deep-copy music)))
> > (for-some-music
> > (lambda (m)
> > (let ((pitch (ly:music-property m 'pitch)))
> > (if (ly:pitch? pitch)
> > (let* ((note-name (ly:pitch-notename pitch))
> > (alteration (ly:pitch-alteration pitch))
> > (offset (assoc-ref scale
> > (cons note-name alteration))))
> > (if offset
> > (let* ((transpose-pitch (ly:make-pitch 0 0 offset))
> > (new-pitch (ly:pitch-transpose pitch
> > transpose-pitch)))
> > (ly:music-set-property! m 'pitch new-pitch)))))
> > #f))
> > copy)
> > copy))
> > myNotes = \relative { a b c d e f gis aes a b c d e f gis aes a }
> > { \myNotes }
> > \midi {
> > \tempo 4 = 120
> > }
> > \score {
> > \tuneMIDI
> > #'(
> > ; Lower F (index 3 in C major scale if 0 is C, no alteration) by
> > 1/10 tone.
> > ((3 . 0) . -1/2)
> > ; Raise G# (index 4, sharp) by 1/10 tone.
> > ((4 . 1/2) . 1/2)
> > )
> > \myNotes
> > \midi { }
> > }
> > \score {
> > \myNotes
> > \midi { }
> > }
> > And I have two same midi files.
> > I tried also to make big detuning, but I just cannot hear that. I 
> > downloaded the last version of lilypond, and I still cannot manage to run 
> > this script.
> > I don't know what am I doing wrong?
> > Brahim
> > ‐‐‐‐‐‐‐ Original Message ‐‐‐‐‐‐‐
> > On Sunday 9 May 2021 10:06, Jean Abou Samra jean@abou-samra.fr wrote:
> >
> > > Le 08/05/2021 à 23:50, Lukas-Fabian Moser a écrit :
> > >
> > > > Hi Jean,
> > > >
> > > > > (let* ((tones (ly:pitch-tones pitch))
> > > > > (r (ly:moment-main
> > > > > (ly:moment-mod
> > > > > (ly:make-moment tones 0)
> > > > > (ly:make-moment 6 0))))
> > > >
> > > > ... using LilyPond's moment-arithmetic (number on the time axis) to
> > > > deal with non-integer tone counts (numbers on the pitch axis) seems to
> > > > me like a reasonable contender for an obfuscated Lily coding contest.
> > > > :-) But impressive it is.
> > >
> > > It is a well-known trick… See
> > > https://gitlab.com/lilypond/lilypond/-/issues/3139
> > > Guile's modulo and remainder functions only
> > > support integers, which is pitiful. Guile 2
> > > brought an improvement with euclidean-quotient
> > > and euclidean-remainder, which always yield a
> > > positive remainder, and support rationals as well
> > > as floats.
> > >
> > > > Maybe it's worth pointing out that your solution hardwires enharmonic
> > > > identification (if I'm not mistaken). Of course I don't know what the
> > > > OP intends to do, but in lots of real-life applications for re-tuning
> > > > it's worth keeping the difference between f-sharp and g-flat alive.
> > >
> > > Here is an enhanced version that stops enharmonic
> > > identification, and copies the music before processing
> > > it, to address Brahim's request.
> > > \version "2.22.0"
> > > tuneMIDI =
> > > #(define-music-function (scale music) (list? ly:music?)
> > > (let ((copy (ly:music-deep-copy music)))
> > > (for-some-music
> > > (lambda (m)
> > > (let ((pitch (ly:music-property m 'pitch)))
> > > (if (ly:pitch? pitch)
> > > (let* ((note-name (ly:pitch-notename pitch))
> > > (alteration (ly:pitch-alteration pitch))
> > > (offset (assoc-ref scale
> > > (cons note-name alteration))))
> > > (if offset
> > > (let* ((transpose-pitch (ly:make-pitch 0 0 offset))
> > > (new-pitch (ly:pitch-transpose pitch
> > > transpose-pitch)))
> > > (ly:music-set-property! m 'pitch new-pitch)))))
> > > #f))
> > > copy)
> > > copy))
> > > myNotes = \relative { a b c d e f gis aes a b c d e f gis aes a }
> > > { \myNotes }
> > > \midi {
> > > \tempo 4 = 120
> > > }
> > > \score {
> > > \tuneMIDI
> > > #'(
> > > ; Lower F (index 3 in C major scale if 0 is C, no alteration) by
> > > 1/10 tone.
> > > ((3 . 0) . -1/10)
> > > ; Raise G# (index 4, sharp) by 1/10 tone.
> > > ((4 . 1/2) . 2/10)
> > > )
> > > \myNotes
> > > \midi { }
> > > }
> > > \score {
> > > \tuneMIDI
> > > #'(((3 . 0) . -1/10))
> > > \myNotes
> > > \midi { }
> > > }
> > >
> > > > As Graham pointed out, LilyPond's habit of setting pitch bends before
> > > > a note and re-setting it immediately after a note whose alteration is
> > > > not in 1/2 * Z leads to strange effects with the release (or reverb)
> > > > of a note. This can be observed in examples involving rests between
> > > > re-tuned notes. I patched my LilyPond for this: Now it never
> > > > explicitly resets MIDI pitch bends, instead each and every note gets a
> > > > pitch-bend command. (Which would be crazy for most applications, but
> > > > is fine for my special needs involving lots of re-tuned notes.) I
> > > > didn't have time to find out how to make this user-configurable.
> > >
> > > An option would be to go create an issue at
> > > https://gitlab.com/lilypond/lilypond/-/issues
> > > and attach your patch there, noting that it
> > > is a work-in-progress and configurability should
> > > be added. That way, someone might pick it up.
> > >
> > > > -   I'm already looking forward to Graham's solution to this problem
> > > >     (post-processing the MIDI files using MTS messages.
> > > >
> > >
> > > I haven't tried it (understanding of MIDI is above
> > > my pay grade), but it shoud certainly yield better
> > > results.
> > > Cheers,
> > > Jean





reply via email to

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