From: Sander J. <s.j...@gm...> - 2009-01-09 23:35:03
|
On Thu, Jan 8, 2009 at 5:37 PM, Darren Salt <li...@yo...> wrote: > I demand that Sander Jansen may or may not have written... > >> Looking through various applications that use xine, most seem to use >> XINE_PARAM_EQ_* with ranges from 1 to 200. (with 0 being off). The xine >> header file says -100 to 100. Can the header file be fixed, so that in the >> future, people won't get confused when trying to use the EQ. > > gxine can be adjusted to use -100...100. I have a commit pending for this. It would be a backward incompatible change. I don't care either way. If you do make a change, I would suggest that you introduce an api that can accept a floating number instead of a integer and set it that way. > >> I also noticed that reading back XINE_PARAM_EQ_* values fails due to >> rounding errors. (e.g you put in a 1 and read back a 0). Maybe add some >> warning in the header file for that as well. > > Two patches, both untested. I think that I prefer v2, though. Yes, no2 seems more elegant to me. Slightly different topic: I want to make sure I'm doing the correct calculations regarding amp level and decibel numbers. I like to represent the user with db numbers instead of xine level ranges for both the amp level and possibly the eq levels. >From what I understand the AMP level is just a multiplication factor that used on the raw sound data. With 100 being the normal level which translates to 1.0, meaning no change at all. Due to the nature of the api (integer based), there's a actual lower limit (being a factor of 0.01). The header file also specifies a upper limit of 200 (a factor 2.0), though thankfully that's not being checked. I was trying to use the AMP level parameter to implement replaygain in my player. The replaygain is a number in decibels which needs to be translated to a multiplication factor like this: scale = pow(10.0, replaygain / 20.0); amp_level = scale * 100.0 Calculating the amp level back to decibels would be like this: scale = amp_level / 100 db = 20* log(scale) In xine given the amp level range of (0,200) would give me roughly a decibel range of (-40db,~6db). I wanted to give the user a "preamp" range of (-20db,20db) which translates to a AMP_LEVEL range of (10,1000). Which is possible due to the upper limit not being checked. According to the replay gain website: In practice, adjustment values from -23dB to +17dB are the likely extremes, and values from -18dB to +2dB are more usual. So I think I should be safe regarding those numbers, though it might be possible to reach the -40db if you enable both a preamp and a replaygain. Now to the EQ levels. They seem to have the same range as the amp level 0 - 200. I'm correct in saying then that the EQ values basically have the same decibel range (-40db,~6db)? If I wanted the user to adjust these between -20db,20db, I really should send xine values between (10,1000). Although I've seen ranges of (-6db,6db) and (-12db,12db) more often, which would result in xine values of (50, 2) and (25,398). Does this make sense? Thanks, Sander -- "And any fool knows a dog needs a home A shelter from pigs on the wing" |