|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
package com.sun.media.sound; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
*/ |
|
public final class ModelStandardTransform implements ModelTransform { |
|
|
|
public static final boolean DIRECTION_MIN2MAX = false; |
|
public static final boolean DIRECTION_MAX2MIN = true; |
|
public static final boolean POLARITY_UNIPOLAR = false; |
|
public static final boolean POLARITY_BIPOLAR = true; |
|
public static final int TRANSFORM_LINEAR = 0; |
|
|
|
public static final int TRANSFORM_CONCAVE = 1; |
|
|
|
public static final int TRANSFORM_CONVEX = 2; |
|
|
|
public static final int TRANSFORM_SWITCH = 3; |
|
public static final int TRANSFORM_ABSOLUTE = 4; |
|
private boolean direction = DIRECTION_MIN2MAX; |
|
private boolean polarity = POLARITY_UNIPOLAR; |
|
private int transform = TRANSFORM_LINEAR; |
|
|
|
public ModelStandardTransform() { |
|
} |
|
|
|
public ModelStandardTransform(boolean direction) { |
|
this.direction = direction; |
|
} |
|
|
|
public ModelStandardTransform(boolean direction, boolean polarity) { |
|
this.direction = direction; |
|
this.polarity = polarity; |
|
} |
|
|
|
public ModelStandardTransform(boolean direction, boolean polarity, |
|
int transform) { |
|
this.direction = direction; |
|
this.polarity = polarity; |
|
this.transform = transform; |
|
} |
|
|
|
public double transform(double value) { |
|
double s; |
|
double a; |
|
if (direction == DIRECTION_MAX2MIN) |
|
value = 1.0 - value; |
|
if (polarity == POLARITY_BIPOLAR) |
|
value = value * 2.0 - 1.0; |
|
switch (transform) { |
|
case TRANSFORM_CONCAVE: |
|
s = Math.signum(value); |
|
a = Math.abs(value); |
|
a = -((5.0 / 12.0) / Math.log(10)) * Math.log(1.0 - a); |
|
if (a < 0) |
|
a = 0; |
|
else if (a > 1) |
|
a = 1; |
|
return s * a; |
|
case TRANSFORM_CONVEX: |
|
s = Math.signum(value); |
|
a = Math.abs(value); |
|
a = 1.0 + ((5.0 / 12.0) / Math.log(10)) * Math.log(a); |
|
if (a < 0) |
|
a = 0; |
|
else if (a > 1) |
|
a = 1; |
|
return s * a; |
|
case TRANSFORM_SWITCH: |
|
if (polarity == POLARITY_BIPOLAR) |
|
return (value > 0) ? 1 : -1; |
|
else |
|
return (value > 0.5) ? 1 : 0; |
|
case TRANSFORM_ABSOLUTE: |
|
return Math.abs(value); |
|
default: |
|
break; |
|
} |
|
|
|
return value; |
|
} |
|
|
|
public boolean getDirection() { |
|
return direction; |
|
} |
|
|
|
public void setDirection(boolean direction) { |
|
this.direction = direction; |
|
} |
|
|
|
public boolean getPolarity() { |
|
return polarity; |
|
} |
|
|
|
public void setPolarity(boolean polarity) { |
|
this.polarity = polarity; |
|
} |
|
|
|
public int getTransform() { |
|
return transform; |
|
} |
|
|
|
public void setTransform(int transform) { |
|
this.transform = transform; |
|
} |
|
} |