lilypond-devel
[Top][All Lists]
Advanced

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

Re: dynamicAbsoluteVolumeFunction documented


From: Stephen
Subject: Re: dynamicAbsoluteVolumeFunction documented
Date: Sun, 22 May 2005 10:15:38 -0500

After sleeping on it, I realized this is not exactly user friendly and it
still is not documented. But Han-Wen, dynamicAbsoluteVolumeFunction and
instrumentEqualizer still do nothing, zero, nada.

If my example is wrong, then midi-volume-equalizer.ly is wrong as well,
since they do exactly the same thing. They both bypass the function and manipulate the alist directly.

Han-Wen, there are implications in what I am doing that are implied, but not
stated that have yet to be addressed. The default Dynamic Absolute Volume
values in midi.scm are wrong and there still needs to be a way to append
instruments to the Intrument Equalizer. On many systems, midi volume 0.2 and
0.0 are nearly identical; the lower levels of midi volume are inaudible,
depending on the dynamic range of the speakers.

In my files, setting a note to piano is the same nearly as muting out the
part. The contrast between loud and soft is greater than it should be. In
midi.scm, the absolute volume alist is this:

("sf" . 1.00)
("fffff" . 0.95)
("ffff" . 0.91)
("fff" . 0.81)
("ff" . 0.71)
("f" . 0.61)
("mf" . 0.50)
("mp" . 0.40)
("p" . 0.30)
("pp" . 0.20)
("ppp" . 0.10)
("pppp" . 0.08)
("ppppp" . 0.05)


Interestingly, there is no such thing as \fffff, but nevermind that. I
propose the midi volume range be from 0.2 (same as 0.0) to 1.00. And I
propose you substitute my values in midi.scm:

("sf" . 1.00)
("fffff" . 0.95)
("ffff" . 0.92)
("fff" . 0.85)
("ff" . 0.80)
("f" . 0.75)
("mf" . 0.68)
("mp" . 0.61)
("p" . 0.55)
("pp" . 0.49)
("ppp" . 0.42)
("pppp" . 0.34)
("ppppp" . 0.25)

Attached to this message is midi.scm with these values substituted. Although
they are not perfect, the previous attachment set-midi-absolute-volume.ly
demonstrates that the midi volume values are evenly spaced. The point it not
to evenly space them numerically, but to evenly space them audibly; so you
have to test the file by listening to the midi output to see what I mean.
Actually, I changed pppp and ppppp so I will attach both files here just so there
is no confusion.

As you can see, it is as if I am defining 0.20 as zero volume and adding it to the midi volume of ppppp, arranging the dynamic midi volume values between 0.25 and 1.00 inclusive. Of course actual midi zero volume is different on every system, but I think effective midi zero volume does not correlate with 0.00 on any system. This is a judgement call I am making based on the experience of having to play the dynamic markings in the piano music properly for my teacher.

Actually, if my volume is set low, I can't hear any midi volume below 0.50. I set p so even at low volume levels I would not think it was muted out. Anything below p still isn't audible unless my volume is medium to loud which is what I expect. It is subjective, but it is not as subjective as you might think. The best way to establish the midi volume levels is to set sf to 1.00 and set the ones below it to be as high as possible while still maintaining an audible distinction between each one. That's basically what I did. Assuming we should arrange them evenly between 0 and 1 is wrong. I doubt that all the midi instruments even respond to the full range of midi volume values.

As far as '
;; this is broken: we should not ever export variables from Scheme.

' goes, I can read and understand computer languages, but the comments are not always so clear. Perhaps if I compared midi.scm to the other files in its directory it would become clear, but the code works and I am focusing on what it does rather than how it does it. The worst thing about the TODO and your response is that in neither instance was an alternative even hinted at. Are you saying the procedures do or should be made to work and setting the alist associated with each one directly is not the method you want to go with?

Stephen

----- Original Message ----- From: "Han-Wen Nienhuys" <address@hidden>
To: "Stephen" <address@hidden>
Cc: "lilypond devel" <address@hidden>
Sent: Saturday, May 21, 2005 6:05 AM
Subject: Re: dynamicAbsoluteVolumeFunction documented


Stephen wrote:
dynamicAbsoluteVolumeFunction still has  [DOCUMENT-ME] as its
documentation.

I cannot find any use for  instrumentEqualizer  or
dynamicAbsoluteVolumeFunction  other than to set the
instrument-equalizer-alist and absolute-volume-alist respectively which
it does automatically anyway and I recommend removing them from
perfomer-init.ly and the documentation.

instrument-equalizer-alist and absolute-volume-alist can each be set or
appended to directly.

midi-volume-equalizer.ly in input/no-notation demonstrates how to append
an instrument to instrument-equalizer-alist.

I am attaching a file called set-midi-absolute-volume.ly which
demonstrates how to set absolute-volume-alist to new values which I
suggest placing in the same directory.

I think you're getting it backwards. The scheme variables don't work
together well with LilyPond property scoping, and my recommendation is
actually the reverse: to make the alists private. midi.scm doesn't say

  ;; this is broken: we should not ever export variables from Scheme.

for nothing.

Perhaps it is not necessary to define default-dynamic-absolute-volume and
default-instrument-equalizer public in midi.scm. Do you have to define
the procedures public in order to define the alists public? Or are they
public only to make the procedures themselves accessible to the user?

Do the examples in input/no-notation show up anywhere in the
documentation?

No. Primarily because there is no output. Perhaps we should study on how
to get MIDI linked in from the HTML pages.

--
 Han-Wen Nienhuys - address@hidden - http://www.xs4all.nl/~hanwen

Attachment: set-midi-absolute-volume.ly
Description: Text Data

Attachment: set-midi-absolute-volume.midi
Description: audio/mid

Attachment: midi.scm
Description: Binary data


reply via email to

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