diff options
Diffstat (limited to 'songdbj/de/jarnbjo/vorbis/Util.java')
-rw-r--r-- | songdbj/de/jarnbjo/vorbis/Util.java | 127 |
1 files changed, 127 insertions, 0 deletions
diff --git a/songdbj/de/jarnbjo/vorbis/Util.java b/songdbj/de/jarnbjo/vorbis/Util.java new file mode 100644 index 0000000000..7e31c9495e --- /dev/null +++ b/songdbj/de/jarnbjo/vorbis/Util.java | |||
@@ -0,0 +1,127 @@ | |||
1 | /* | ||
2 | * $ProjectName$ | ||
3 | * $ProjectRevision$ | ||
4 | * ----------------------------------------------------------- | ||
5 | * $Id$ | ||
6 | * ----------------------------------------------------------- | ||
7 | * | ||
8 | * $Author$ | ||
9 | * | ||
10 | * Description: | ||
11 | * | ||
12 | * Copyright 2002-2003 Tor-Einar Jarnbjo | ||
13 | * ----------------------------------------------------------- | ||
14 | * | ||
15 | * Change History | ||
16 | * ----------------------------------------------------------- | ||
17 | * $Log$ | ||
18 | * Revision 1.1 2005/07/11 15:42:36 hcl | ||
19 | * Songdb java version, source. only 1.5 compatible | ||
20 | * | ||
21 | * Revision 1.1.1.1 2004/04/04 22:09:12 shred | ||
22 | * First Import | ||
23 | * | ||
24 | * Revision 1.3 2003/04/10 19:49:04 jarnbjo | ||
25 | * no message | ||
26 | * | ||
27 | * Revision 1.2 2003/03/16 01:11:12 jarnbjo | ||
28 | * no message | ||
29 | * | ||
30 | * | ||
31 | */ | ||
32 | |||
33 | package de.jarnbjo.vorbis; | ||
34 | |||
35 | final public class Util { | ||
36 | |||
37 | public static final int ilog(int x) { | ||
38 | int res=0; | ||
39 | for(; x>0; x>>=1, res++); | ||
40 | return res; | ||
41 | } | ||
42 | |||
43 | public static final float float32unpack(int x) { | ||
44 | float mantissa=x&0x1fffff; | ||
45 | float e=(x&0x7fe00000)>>21; | ||
46 | if((x&0x80000000)!=0) { | ||
47 | mantissa=-mantissa; | ||
48 | } | ||
49 | return mantissa*(float)Math.pow(2.0, e-788.0); | ||
50 | } | ||
51 | |||
52 | public static final int lookup1Values(int a, int b) { | ||
53 | int res=(int)Math.pow(Math.E, Math.log(a)/b); | ||
54 | return intPow(res+1, b)<=a?res+1:res; | ||
55 | } | ||
56 | |||
57 | public static final int intPow(int base, int e) { | ||
58 | int res=1; | ||
59 | for(; e>0; e--, res*=base); | ||
60 | return res; | ||
61 | } | ||
62 | |||
63 | public static final boolean isBitSet(int value, int bit) { | ||
64 | return (value&(1<<bit))!=0; | ||
65 | } | ||
66 | |||
67 | public static final int icount(int value) { | ||
68 | int res=0; | ||
69 | while(value>0) { | ||
70 | res+=value&1; | ||
71 | value>>=1; | ||
72 | } | ||
73 | return res; | ||
74 | } | ||
75 | |||
76 | public static final int lowNeighbour(int[] v, int x) { | ||
77 | int max=-1, n=0; | ||
78 | for(int i=0; i<v.length && i<x; i++) { | ||
79 | if(v[i]>max && v[i]<v[x]) { | ||
80 | max=v[i]; | ||
81 | n=i; | ||
82 | } | ||
83 | } | ||
84 | return n; | ||
85 | } | ||
86 | |||
87 | public static final int highNeighbour(int[] v, int x) { | ||
88 | int min=Integer.MAX_VALUE, n=0; | ||
89 | for(int i=0; i<v.length && i<x; i++) { | ||
90 | if(v[i]<min && v[i]>v[x]) { | ||
91 | min=v[i]; | ||
92 | n=i; | ||
93 | } | ||
94 | } | ||
95 | return n; | ||
96 | } | ||
97 | |||
98 | public static final int renderPoint(int x0, int x1, int y0, int y1, int x) { | ||
99 | int dy=y1-y0; | ||
100 | int ady=dy<0?-dy:dy; | ||
101 | int off=(ady*(x-x0))/(x1-x0); | ||
102 | return dy<0?y0-off:y0+off; | ||
103 | } | ||
104 | |||
105 | public static final void renderLine(final int x0, final int y0, final int x1, final int y1, final float[] v) { | ||
106 | final int dy=y1-y0; | ||
107 | final int adx=x1-x0; | ||
108 | final int base=dy/adx; | ||
109 | final int sy=dy<0?base-1:base+1; | ||
110 | int x=x0; | ||
111 | int y=y0; | ||
112 | int err=0; | ||
113 | final int ady=(dy<0?-dy:dy)-(base>0?base*adx:-base*adx); | ||
114 | |||
115 | v[x]*=Floor.DB_STATIC_TABLE[y]; | ||
116 | for(x=x0+1; x<x1; x++) { | ||
117 | err+=ady; | ||
118 | if(err>=adx) { | ||
119 | err-=adx; | ||
120 | v[x]*=Floor.DB_STATIC_TABLE[y+=sy]; | ||
121 | } | ||
122 | else { | ||
123 | v[x]*=Floor.DB_STATIC_TABLE[y+=base]; | ||
124 | } | ||
125 | } | ||
126 | } | ||
127 | } \ No newline at end of file | ||