Mailing List archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[vdr] Re: Linear volume response in VDR
Oliver Endriss wrote:
>
> On Sonntag, 17. Oktober 2004 11:10, Klaus Schmidinger wrote:
> > Udo Richter wrote:
> > >
> > > Emil Naepflein wrote:
> > > > + for (i = 1, Vol = 0; i < Volume; i++)
> > > > + Vol += (256 - i) * (256 - i);
> > > > +
> > > > + am.volume_left = am.volume_right = Vol / 21718;
> > >
> > > A little math never hurts: This formula gives exactly the same result,
> > > but without a loop:
> > >
> > > Vol = (393216 -1537*Volume +2*Volume*Volume) * (Volume-1) / 130308;
> > >
> > > am.volume_left = am.volume_right = Vol;
> > >
> > > This is a cubic equation satisfying the relation 1->1 and nearly
> > > 256->256, plus a gradient of 0 close to 256.
> > >
> > > An alternate proposal would be:
> > >
> > > Vol = Volume + (255*Volume - Volume*Volume)* q / 65025
> > >
> > > Q is a free parameter in this quadratic variant. For q=0, this is the
> > > linear identity as before, and for q=255 this has a gradient of 0 at
> > > 255. All q=0..255 should work, and theres always 0->0 and 255->255.
> > >
> > > Of course, if anyone knows what kind of non-linearity is behind the
> > > volume control, this would be even better.
> >
> > Thanks for the explanation.
> > I think I'll go with the last formula, with q = 255.
> > However, shouldn't the rightmost contant be 65535 (0xFFFF)?
> > It doesn't make much difference, actually, but I'm having a hard
> > time understanding 65025, while 65535 would seem natural...
>
> 65025 = 255*255
Oh, I guess I should have seen that... ;-)
> This value results from the design criterium
> gradient=0 for q=255 and Volume=255.
>
> Obvioulsly, the formula can be simplified for q=255:
> Vol = Volume + (255*Volume - Volume*Volume) * 255 / (255*255)
> Vol = Volume + (255*Volume - Volume*Volume) / 255
> Vol = 2*Volume - Volume*Volume/255
Great, that's even better.
Klaus
Home |
Main Index |
Thread Index