aboutsummaryrefslogtreecommitdiff
path: root/engine/src/core/com/jme3/audio/Environment.java
diff options
context:
space:
mode:
Diffstat (limited to 'engine/src/core/com/jme3/audio/Environment.java')
-rw-r--r--engine/src/core/com/jme3/audio/Environment.java256
1 files changed, 256 insertions, 0 deletions
diff --git a/engine/src/core/com/jme3/audio/Environment.java b/engine/src/core/com/jme3/audio/Environment.java
new file mode 100644
index 0000000..9a1279e
--- /dev/null
+++ b/engine/src/core/com/jme3/audio/Environment.java
@@ -0,0 +1,256 @@
+/*
+ * Copyright (c) 2009-2010 jMonkeyEngine
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * * Neither the name of 'jMonkeyEngine' nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+package com.jme3.audio;
+
+import com.jme3.math.FastMath;
+
+/**
+ * Audio environment, for reverb effects.
+ * @author Kirill
+ */
+public class Environment {
+
+ private float airAbsorbGainHf = 0.99426f;
+ private float roomRolloffFactor = 0;
+
+ private float decayTime = 1.49f;
+ private float decayHFRatio = 0.54f;
+
+ private float density = 1.0f;
+ private float diffusion = 0.3f;
+
+ private float gain = 0.316f;
+ private float gainHf = 0.022f;
+
+ private float lateReverbDelay = 0.088f;
+ private float lateReverbGain = 0.768f;
+
+ private float reflectDelay = 0.162f;
+ private float reflectGain = 0.052f;
+
+ private boolean decayHfLimit = true;
+
+ public static final Environment Garage, Dungeon, Cavern, AcousticLab, Closet;
+
+ static {
+ Garage = new Environment(1, 1, 1, 1, .9f, .5f, .751f, .0039f, .661f, .0137f);
+ Dungeon = new Environment(.75f, 1, 1, .75f, 1.6f, 1, 0.95f, 0.0026f, 0.93f, 0.0103f);
+ Cavern = new Environment(.5f, 1, 1, .5f, 2.25f, 1, .908f, .0103f, .93f, .041f);
+ AcousticLab = new Environment(.5f, 1, 1, 1, .28f, 1, .87f, .002f, .81f, .008f);
+ Closet = new Environment(1, 1, 1, 1, .15f, 1, .6f, .0025f, .5f, .0006f);
+ }
+
+ private static final float eaxDbToAmp(float eaxDb){
+ float dB = eaxDb / 2000f;
+ return FastMath.pow(10f, dB);
+ }
+
+ public Environment(){
+ }
+
+ public Environment(Environment source) {
+ this.airAbsorbGainHf = source.airAbsorbGainHf;
+ this.roomRolloffFactor = source.roomRolloffFactor;
+ this.decayTime = source.decayTime;
+ this.decayHFRatio = source.decayHFRatio;
+ this.density = source.density;
+ this.diffusion = source.diffusion;
+ this.gain = source.gain;
+ this.gainHf = source.gainHf;
+ this.lateReverbDelay = source.lateReverbDelay;
+ this.lateReverbGain = source.lateReverbGain;
+ this.reflectDelay = source.reflectDelay;
+ this.reflectGain = source.reflectGain;
+ this.decayHfLimit = source.decayHfLimit;
+ }
+
+ public Environment(float density, float diffusion, float gain, float gainHf,
+ float decayTime, float decayHf, float reflGain,
+ float reflDelay, float lateGain, float lateDelay){
+ this.decayTime = decayTime;
+ this.decayHFRatio = decayHf;
+ this.density = density;
+ this.diffusion = diffusion;
+ this.gain = gain;
+ this.gainHf = gainHf;
+ this.lateReverbDelay = lateDelay;
+ this.lateReverbGain = lateGain;
+ this.reflectDelay = reflDelay;
+ this.reflectGain = reflGain;
+ }
+
+ public Environment(float[] e){
+ if (e.length != 28)
+ throw new IllegalArgumentException("Not an EAX preset");
+
+ // skip env id
+ // e[0]
+ // skip room size
+ // e[1]
+
+// density = 0;
+ diffusion = e[2];
+ gain = eaxDbToAmp(e[3]); // convert
+ gainHf = eaxDbToAmp(e[4]) / eaxDbToAmp(e[5]); // convert
+ decayTime = e[6];
+ decayHFRatio = e[7] / e[8];
+ reflectGain = eaxDbToAmp(e[9]); // convert
+ reflectDelay = e[10];
+
+ // skip 3 pan values
+ // e[11] e[12] e[13]
+
+ lateReverbGain = eaxDbToAmp(e[14]); // convert
+ lateReverbDelay = e[15];
+
+ // skip 3 pan values
+ // e[16] e[17] e[18]
+
+ // skip echo time, echo damping, mod time, mod damping
+ // e[19] e[20] e[21] e[22]
+
+ airAbsorbGainHf = eaxDbToAmp(e[23]);
+
+ // skip HF Reference and LF Reference
+ // e[24] e[25]
+
+ roomRolloffFactor = e[26];
+
+ // skip flags
+ // e[27]
+ }
+
+ public float getAirAbsorbGainHf() {
+ return airAbsorbGainHf;
+ }
+
+ public void setAirAbsorbGainHf(float airAbsorbGainHf) {
+ this.airAbsorbGainHf = airAbsorbGainHf;
+ }
+
+ public float getDecayHFRatio() {
+ return decayHFRatio;
+ }
+
+ public void setDecayHFRatio(float decayHFRatio) {
+ this.decayHFRatio = decayHFRatio;
+ }
+
+ public boolean isDecayHfLimit() {
+ return decayHfLimit;
+ }
+
+ public void setDecayHfLimit(boolean decayHfLimit) {
+ this.decayHfLimit = decayHfLimit;
+ }
+
+ public float getDecayTime() {
+ return decayTime;
+ }
+
+ public void setDecayTime(float decayTime) {
+ this.decayTime = decayTime;
+ }
+
+ public float getDensity() {
+ return density;
+ }
+
+ public void setDensity(float density) {
+ this.density = density;
+ }
+
+ public float getDiffusion() {
+ return diffusion;
+ }
+
+ public void setDiffusion(float diffusion) {
+ this.diffusion = diffusion;
+ }
+
+ public float getGain() {
+ return gain;
+ }
+
+ public void setGain(float gain) {
+ this.gain = gain;
+ }
+
+ public float getGainHf() {
+ return gainHf;
+ }
+
+ public void setGainHf(float gainHf) {
+ this.gainHf = gainHf;
+ }
+
+ public float getLateReverbDelay() {
+ return lateReverbDelay;
+ }
+
+ public void setLateReverbDelay(float lateReverbDelay) {
+ this.lateReverbDelay = lateReverbDelay;
+ }
+
+ public float getLateReverbGain() {
+ return lateReverbGain;
+ }
+
+ public void setLateReverbGain(float lateReverbGain) {
+ this.lateReverbGain = lateReverbGain;
+ }
+
+ public float getReflectDelay() {
+ return reflectDelay;
+ }
+
+ public void setReflectDelay(float reflectDelay) {
+ this.reflectDelay = reflectDelay;
+ }
+
+ public float getReflectGain() {
+ return reflectGain;
+ }
+
+ public void setReflectGain(float reflectGain) {
+ this.reflectGain = reflectGain;
+ }
+
+ public float getRoomRolloffFactor() {
+ return roomRolloffFactor;
+ }
+
+ public void setRoomRolloffFactor(float roomRolloffFactor) {
+ this.roomRolloffFactor = roomRolloffFactor;
+ }
+}