Thank you for all your help on this.  I now have an include file that
does more or less what I want, and of course I can tweak in further in
the future.

David


On Tue, 2019-07-16 at 15:11 +0200, Jean ABOU SAMRA wrote:
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> \version "2.19.83"
> 
> 
> 
> 
> %{ From 
> http://lilypond.org/doc/v2.19/Documentation/notation/controlling-midi-dynamics.fr.html
> 
> 
> midiMinimumVolume + (midiMaximumVolume - midiMinimumVolume) *
> fraction
> 
> 
> These are the volume coefficients ('fraction' above) applied to each
> dynamic.
> %}
> #(define (my-dynamic-absolute-volume-function dynamic-name)
>   (assoc-get dynamic-name
>     '(
>       ; Adjust these values to get what you would like.
>       ; You can add other dynamics.
>       ; If an dynamic name is not found, the default dynamic values
> are used.
>       ("ff" . 0.95)
>       ("pp" . 0.3)
>     )
>     (default-dynamic-absolute-volume dynamic-name)))
> 
> 
> %{ These are the default equalizations applied to each MIDI
> instrument.
> An equalization consists in (min . max) where min is the value to
> apply for midiMinimumVolume and max for midiMaximumVolume.
> Keep refering to the formula above!
> %}
> #(define (my-instrument-equalizer instrument-name)
>   (assoc-get instrument-name
>     '(
>       ; Adjust these values to get what you would like.
>       ; You can add other instrument names.
>       ; If an instrument name is not found, the default equalizer is
> used.
>       ("violin" . (0.1 . 0.4))
>       ("cello" . (0.5 1.0))
>     )
>     (default-instrument-equalizer instrument-name)))
> 
> 
> 
> 
> \midi {
>   \context {
>     \Score
>     instrumentEqualizer = #my-instrument-equalizer
>     dynamicAbsoluteVolumeFunction = #my-dynamic-absolute-volume-
> function
>   }
> }
> 
> 
> 
> 
> violin = \new Voice \relative { c'4\pp d e f g\ff a b c }
> cello = \new Voice \relative { a,4\pp b c d e\ff f gis a }
> 
> 
> \score {
>   <<
>     \new Staff \with { midiInstrument = "violin" } { \violin }
>     \new Staff \with { midiInstrument = "cello" } { \cello }
>   >>
>   \midi { }
> }
> %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> 
> You can use an instrument equalizer and custom dynamic absolute
> volume values at the same time.
> Of course, instrument equalization can be achieved using \set
> Staff.midiMinimumVolume = min  \set Staff.maximumVolume = max …but
> the power of an instrument equalizer is that you can put it in a
> separate file and\include it, as you say that you generally want to
> hear the cello louder and the violin less loud.
> By the way, I find that the example given on
> http://lilypond.org/doc/v2.19/Documentation/notation/controlling-midi-dynamics.html#setting-midi-volumein
>  selected snippets at "Replacing default MIDI instrument
> equalization"is overly complicated. Why define the alist empty to
> append to it later?And why not just use assoc-get? It could be easily
> improved.
> Best regards,Jean Abou Samra
> > Le 15 juil. 2019 à 18:26, David Sumbler <da...@aeolia.co.uk> a
> > écrit :
> > 
> > Hi Jean
> > 
> > That's great - I certainly now can get a greater range of dynamic
> > than before.  Thank you very much.
> > 
> > But I find that altering values in 'my-instrument-equalizer-alist'
> > has no effect at all.  How can I adjust the relative volumes of 2
> > different instruments - say, 'violin' and 'cello'.  (I find that in
> > the fluidr3_gm sound font, the cello is far quieter than the other
> > stringed instruments.) 
> > 
> > David
> > 
> > 
> > On Mon, 2019-07-15 at 17:41 +0200, Jean ABOU SAMRA wrote:
> > > Hi David,
> > > Your problem is not with the instrument, it's with the dynamics
> > > themselves.
> > > The algorithm that affects a volume to a note does a scale
> > > between midiMinimumVolume and midiMaximumVolume that includes all
> > > dynamics. Mathematically, you can think:
> > > volume = midiMinimumVolume + (midiMaximumVolume -
> > > midiMinimumVolume)*dynamic
> > > 
> > > Let me try a diagram:
> > > 
> > > 0                       |        pppp   ppp   pp  p  mp  mf f ff
> > > fff   ffff  fffff sf  |                         1
> > > no sound                midiMinimumVolume                        
> > >                      midiMaximumVolume         maximum volume
> > > possible
> > > 
> > > 
> > > Here you set midiMinimumVolume to 0 or almost and
> > > midiMaximumVolume to 1, so if there is not enough difference for
> > > you, you need to influence the scale between the two in addition
> > > to minimum and maximum volume.
> > > 
> > > Taking a look at 
> > > http://lilypond.org/doc/v2.19/Documentation/internals/dynamic_005fperformer
> > > suggests to set the dynamicAbsoluteVolumeFunction property. You
> > > will find its default in scm/midi.scm:
> > > 
> > > ;; define factor of total volume per dynamic marking(define-
> > > session-public absolute-volume-alist '())(set! absolute-volume-
> > > alist      (append       '(         ("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)         )       absolute-volume-alist))
> > > (define-public (default-dynamic-absolute-volume s)  (assoc-get s
> > > absolute-volume-alist))
> > > so now you can modify it, for example:
> > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> > > \version "2.19.83"
> > > 
> > > 
> > > #(define (my-dynamic-absolute-volume-function dynamic-name)
> > >  (assoc-get dynamic-name
> > >   '(
> > >      ("sf" . 1.00)
> > >      ("fffff" . 0.95)
> > >      ("ffff" . 0.92)
> > >      ("fff" . 0.85)
> > >      ("ff" . 0.95) ;; was 0.80
> > >      ("f" . 0.75)
> > >      ("mf" . 0.68)
> > >      ("mp" . 0.61)
> > >      ("p" . 0.55)
> > >      ("pp" . 0.10) ;; was 0.49
> > >      ("ppp" . 0.42)
> > >      ("pppp" . 0.34)
> > >      ("ppppp" . 0.25)
> > >    )))
> > > 
> > > 
> > > \score {
> > >  \new Staff \with { midiInstrument = "trumpet" } {
> > >    \set Score.midiMinimumVolume = 0.0
> > >    \set Score.midiMaximumVolume = 1.0
> > >    \set Score.dynamicAbsoluteVolumeFunction = #my-dynamic-
> > > absolute-volume-function
> > >    a'8\pp b' cis'' d'' e''-.\ff d''-. cis''-. b'-. a'
> > >  }
> > >  \midi { }
> > > \layout { }
> > > }
> > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> > > You understand that default 'piano' is not so piano because we
> > > have to go to ppppp.
> > > By adjusting the values in that associative list, you can play
> > > with dynamics and get the exact contrast you would like.
> > > Hope that helps.Kind regards,Jean Abou Samra.
> > > > Le 15 juil. 2019 à 16:16, David Sumbler <da...@aeolia.co.uk> a
> > > > écrit :
> > > > 
> > > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> > > > \version "2.19.82"
> > > > 
> > > > #(define my-instrument-equalizer-alist '())
> > > > 
> > > > #(set! my-instrument-equalizer-alist
> > > >   (append
> > > >    '(
> > > >      ("trumpet" . (0.01 . 0.99)))
> > > >    my-instrument-equalizer-alist))
> > > > 
> > > > #(define (my-instrument-equalizer s)
> > > >   (let ((entry (assoc s my-instrument-equalizer-alist)))
> > > >     (if entry
> > > >       (cdr entry))))
> > > > 
> > > > \score {
> > > >   \new Staff \with { midiInstrument = "trumpet" } {
> > > > %    \set Score.midiMaximumVolume = #1
> > > > %    \set Score.midiMinimumVolume = #0
> > > >     \set Score.instrumentEqualizer = #my-instrument-equalizer
> > > >     a'8\pp b' cis'' d'' e''-.\ff d''-. cis''-. b'-. a'
> > > >   }
> > > >   \midi { }
> > > > }
> > > > %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
> > > > 
> > > > Can somebody explain how I can control the absolute minimum and
> > > > maximum
> > > > values of individual instruments in midi?
> > > > 
> > > > In the above snippet, I expect to find the first bar almost
> > > > inaudible
> > > > and the second bar extremely loud.  However, I find that the
> > > > difference
> > > > between the pp section and the ff is quite limited.  If I
> > > > reduce the
> > > > supposed maximum volume of the trumpet to, say, 0.5, then the
> > > > pp will
> > > > indeed be very quiet, but when I restore the second parameter
> > > > to 0.99
> > > > as here, then the pp passage is much louder than previously.
> > > > 
> > > > If I uncomment the Score.midiMaximumVolume line and the
> > > > following one,
> > > > it makes little difference.  The Internals Reference states
> > > > that valid
> > > > values for these 2 parameters are numbers between 0 and 1.
> > > >  However, if
> > > > I set midiMaximumVolume to 2, I find that the pp and the ff
> > > > sections
> > > > have the same volume as each other.  Further increases in
> > > > midiMaximumVolume do not seem to make any difference.
> > > > 
> > > > In every case, the total dynamic range is considerably less
> > > > than I
> > > > would like.  How can I extend the dynamic range beyond the
> > > > limited
> > > > range I can currently get?
> > > > 
> > > > David
> > > > 
> > > > 
> > > > _______________________________________________
> > > > lilypond-user mailing list
> > > > lilypond-user@gnu.org
> > > > https://lists.gnu.org/mailman/listinfo/lilypond-user
> > 
> > _______________________________________________
> > lilypond-user mailing list
> > lilypond-user@gnu.org
> > https://lists.gnu.org/mailman/listinfo/lilypond-user


_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to