[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Microtonal midi output
From: |
Jacques Menu |
Subject: |
Re: Microtonal midi output |
Date: |
Sun, 9 May 2021 16:07:41 +0200 |
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
>
>
>
- 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
Re: Microtonal midi output, brahim.pro, 2021/05/08