The volume control on my Thinkpad T61P is LINEAR (instead of logarithmic). This means that the lower end of the control is very sensitive, and the upper end is now (as perceived by the ear. To fix this, Windows XP as of SP2 provides a way to set a custom volume curve.
This isn't a perfect solution because, even though the volume buttons on the thinkpad work well now, the On-Screen Display doesn't reflect that. Instead, it reflects the actual linear volume level, with the result that the the display levels jump with wider gaps at the high end. Also, XP's built-in volume control is linear and continues to be so even after providing it a custom curve.
theory of operation
Windows XP as of SP2 provides a way to pass a custom curve to the volume control. The following generates a logarithmic curve suitable for pasting into a .reg file that can then be executed to update the windows registry.
You should make a backup copy of the registry entry at "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\Audio\VolumeControl" first, before proceeding.
Please note the standard "I am not responsible if anything goes wrong" disclaimer before you execute the .reg file...
In more detail, you should:
- Set the appropriate values in the usage section
- Copy the text in the generated registry entry (new) section
- Paste the copied text into a new file with a .reg extension
- Back up the existing entry at HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\Audio\VolumeControl from within regedit.exe
- Execute the new .reg file by double-clicking on it
usage
Bias starts the volume control at the LOGARITHM of this percentage (i.e. the first value after zero). Limit sets the maximum volume we generate the curve to, and is the LOGARITHM of this percentage - this should be 100 unless you want a lower maximum volume. If Bias is greater than Limit, the generated curve will reverse the values. Steps determines how many values are provided to represent the curve.
The default values work well for the t61p thinkpad. Download the default .reg file.
original registry entry (old)
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\Audio\VolumeControl] "EnableVolumeTable"=dword:00000000 "VolumeTable"=hex:00,00,00,00,0f,04,00,00,d2,04,00,00,bb,05,00,00,d0,06,00,00,\ 18,08,00,00,9f,09,00,00,6f,0b,00,00,97,0d,00,00,27,10,00,00,32,13,00,00,d1,\ 16,00,00,1e,1b,00,00,3a,20,00,00,4e,26,00,00,86,2d,00,00,1b,36,00,00,4e,40,\ 00,00,6d,4c,00,00,d5,5a,00,00,f4,6b,00,00,4d,80,00,00,7d,98,00,00,3b,b5,00,\ 00,65,d7,00,00,ff,ff,00,00
generated registry entry (new)
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Multimedia\Audio\VolumeControl] "EnableVolumeTable"=dword:00000001 "VolumeTable"=hex:00,00,00,00,54,00,00,00,5e,00,00,00,68,00,00,00,74,00,00,00,81,00,00,00,\ 90,00,00,00,a0,00,00,00,b3,00,00,00,c7,00,00,00,dd,00,00,00,f7,00,00,00,\ 12,01,00,00,32,01,00,00,54,01,00,00,7b,01,00,00,a6,01,00,00,d6,01,00,00,\ 0b,02,00,00,46,02,00,00,88,02,00,00,d2,02,00,00,24,03,00,00,7f,03,00,00,\ e4,03,00,00,55,04,00,00,d3,04,00,00,5f,05,00,00,fb,05,00,00,a8,06,00,00,\ 6a,07,00,00,41,08,00,00,30,09,00,00,3b,0a,00,00,63,0b,00,00,ae,0c,00,00,\ 1d,0e,00,00,b7,0f,00,00,7f,11,00,00,7a,13,00,00,af,15,00,00,24,18,00,00,\ e0,1a,00,00,ec,1d,00,00,50,21,00,00,16,25,00,00,4a,29,00,00,f7,2d,00,00,\ 2d,33,00,00,f9,38,00,00,6d,3f,00,00,9d,46,00,00,9d,4e,00,00,85,57,00,00,\ 70,61,00,00,7a,6c,00,00,c4,78,00,00,73,86,00,00,af,95,00,00,a4,a6,00,00,\ 86,b9,00,00,8b,ce,00,00,f1,e5,00,00,ff,ff,00,00
graph of curve
Graph is scaled to 300 pixels height, 3 pixel spacing
raw values in decimal
Raw values are provided for those who want to plot the curve - Excel works well.
0 84 94 104 116 129 144 160 179 199 221 247 274 306 340 379 422 470 523 582 648 722 804 895 996 1109 1235 1375 1531 1704 1898 2113 2352 2619 2915 3246 3613 4023 4479 4986 5551 6180 6880 7660 8528 9494 10570 11767 13101 14585 16237 18077 20125 22405 24944 27770 30916 34419 38319 42660 47494 52875 58865 65535