[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 13:58:27 +0000 |
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
- Re: Microtonal midi output, (continued)
- Re: Microtonal midi output, Jean Abou Samra, 2021/05/08
- Re: Microtonal midi output, Kieren MacMillan, 2021/05/08
- Re: Microtonal midi output, Lukas-Fabian Moser, 2021/05/08
- Re: Microtonal midi output, Kieren MacMillan, 2021/05/09
- Re: Microtonal midi output, Lukas-Fabian Moser, 2021/05/09
- Re: Microtonal midi output, Kieren MacMillan, 2021/05/09
- Re: Microtonal midi output, Lukas-Fabian Moser, 2021/05/09
- Re: Microtonal midi output, Jean Abou Samra, 2021/05/09
- Re: Microtonal midi output, Hans Åberg, 2021/05/09
- Re: Microtonal midi output, Graham Breed, 2021/05/10
- Re: Microtonal midi output, Lukas-Fabian Moser, 2021/05/10