#!/usr/bin/bc -l /* 2^(-x) mixer volume scale $Id: mixer-l2l,v 1.7 2005/09/25 12:41:26 chibis Exp $ */ scale = 0 /* it's not dB, but really a B! db = 8 means 80dB scale */ db = 8 /* don't change anything below this line! ---------------------------------- */ points = 10 maxmix = 100 plen = maxmix/points ibase = 16 zmax = 7FFFFFFF ibase = A /* volume from 0 to maxmix to gpr value */ define vol(x){ scale = 0; if(x==0) return 0; scale = 16; vol_10 = 1-x/maxmix; db_vol = db*vol_10; ret =zmax*e(-db_vol*l(2)); scale = 0; return ret; }; print "/*\n"; print " * Mixer volume tables for 0...-", db, "0dB, ", points, " points,\n"; print " * ", plen, " values between approximation points\n"; print " * min mixer value 0, max mixer value ", maxmix, ".\n"; print " * Generated by scripts/mixer-l2l (2^(-x) scale).\n"; print " */\n\n"; print "#define L2L_POINTS ", points, "\n\n"; obase = 10 print "static int l2l_df[L2L_POINTS] = {\n"; for(i=points;i>0;i--){ lvol = i*plen; rvol = (i-1)*plen obase=16 print "\t0x", (vol(lvol) - vol(rvol)) / plen obase=10 print ",\t\t/* ", lvol*1, "..", rvol*1," */\n"; } print "};\n\n"; obase = 10 print "static int l2l_f[L2L_POINTS] = {\n"; for(i=points-1;i>=0;i--){ lvol = i*plen; obase=16 print "\t0x", (vol(lvol))/1 obase=10 print ",\t\t/* ", lvol*1, " */\n"; }; print "};\n"; quit