flibitEFX source
This commit is contained in:
@@ -22,7 +22,6 @@ if (OperatingSystem.current().isWindows()) {
|
||||
dependencies {
|
||||
compile (['org.lwjgl.lwjgl:lwjgl:' + lwjgl_ver],
|
||||
['org.lwjgl.lwjgl:lwjgl_util:' + lwjgl_ver])
|
||||
compile fileTree (dir: 'lib', include: 'flibitEFX.jar')
|
||||
}
|
||||
|
||||
sourceSets {
|
||||
|
||||
Binary file not shown.
71
src/com/flibitijibibo/flibitEFX/EFXEffect.java
Normal file
71
src/com/flibitijibibo/flibitEFX/EFXEffect.java
Normal file
@@ -0,0 +1,71 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Ethan "flibitijibibo" Lee
|
||||
*
|
||||
* This file is part of flibitEFX.
|
||||
*
|
||||
* flibitEFX is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* flibitEFX is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with flibitEFX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.flibitijibibo.flibitEFX;
|
||||
|
||||
import org.lwjgl.openal.EFX10;
|
||||
|
||||
/**
|
||||
* @author Ethan "flibitijibibo" Lee
|
||||
*/
|
||||
|
||||
public abstract class EFXEffect {
|
||||
|
||||
private int slotIndex;
|
||||
private int effectIndex;
|
||||
|
||||
/** Constructor creates an EFX effect slot containing an effect.
|
||||
* @param efxEffect The EFX10 effect type (i.e. EFX10.AL_EFFECT_REVERB)
|
||||
*/
|
||||
public EFXEffect(int efxEffect) {
|
||||
slotIndex = EFX10.alGenAuxiliaryEffectSlots();
|
||||
effectIndex = EFX10.alGenEffects();
|
||||
// TODO: Check to see if efxEffect is a valid AL_EFFECT_TYPE.
|
||||
EFX10.alEffecti(effectIndex, EFX10.AL_EFFECT_TYPE, efxEffect);
|
||||
EFX10.alAuxiliaryEffectSloti(slotIndex, EFX10.AL_EFFECTSLOT_EFFECT, effectIndex);
|
||||
}
|
||||
|
||||
/** Unloads the EFX effect and effect slot. */
|
||||
public void killEffect() {
|
||||
EFX10.alDeleteEffects(effectIndex);
|
||||
EFX10.alDeleteAuxiliaryEffectSlots(slotIndex);
|
||||
}
|
||||
|
||||
/** Returns the index of the EFX effect slot.
|
||||
* @return The index of the EFX effect slot
|
||||
*/
|
||||
public int getIndex() {
|
||||
return slotIndex;
|
||||
}
|
||||
|
||||
/** Applies an effect property to this EFX effect.
|
||||
* @param passedProperty The EFX10 effect property
|
||||
* @param passedValue The EFX10 effect value
|
||||
*/
|
||||
protected void addEffectf(int passedProperty, float passedValue) {
|
||||
EFX10.alEffectf(effectIndex, passedProperty, passedValue);
|
||||
}
|
||||
|
||||
/** Applies an effect property to this EFX effect.
|
||||
* @param passedProperty The EFX10 effect property
|
||||
* @param passedValue The EFX10 effect value
|
||||
*/
|
||||
protected void addEffecti(int passedProperty, int passedValue) {
|
||||
EFX10.alEffecti(effectIndex, passedProperty, passedValue);
|
||||
}
|
||||
}
|
||||
93
src/com/flibitijibibo/flibitEFX/EFXEffectEcho.java
Normal file
93
src/com/flibitijibibo/flibitEFX/EFXEffectEcho.java
Normal file
@@ -0,0 +1,93 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Ethan "flibitijibibo" Lee
|
||||
*
|
||||
* This file is part of flibitEFX.
|
||||
*
|
||||
* flibitEFX is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* flibitEFX is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with flibitEFX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.flibitijibibo.flibitEFX;
|
||||
|
||||
import org.lwjgl.openal.EFX10;
|
||||
|
||||
/**
|
||||
* @author Ethan "flibitijibibo" Lee
|
||||
*/
|
||||
|
||||
public class EFXEffectEcho extends EFXEffect {
|
||||
|
||||
/** Constructor creates a generic echo effect. */
|
||||
public EFXEffectEcho() {
|
||||
super(EFX10.AL_EFFECT_ECHO);
|
||||
}
|
||||
|
||||
/** Sets the amount of high frequency damping to apply to the echo effect.
|
||||
* @param passedValue The new damping value to apply to the echo effect
|
||||
*/
|
||||
public void setDamping(float passedValue) {
|
||||
if (passedValue < EFX10.AL_ECHO_MIN_DAMPING)
|
||||
addEffectf(EFX10.AL_ECHO_DAMPING, EFX10.AL_ECHO_MIN_DAMPING);
|
||||
else if (passedValue > EFX10.AL_ECHO_MAX_DAMPING)
|
||||
addEffectf(EFX10.AL_ECHO_DAMPING, EFX10.AL_ECHO_MAX_DAMPING);
|
||||
else
|
||||
addEffectf(EFX10.AL_ECHO_DAMPING, passedValue);
|
||||
}
|
||||
|
||||
/** Sets the echo effect's delay time.
|
||||
* @param passedValue The echo effect's new delay time
|
||||
*/
|
||||
public void setDelay(float passedValue) {
|
||||
if (passedValue < EFX10.AL_ECHO_MIN_DELAY)
|
||||
addEffectf(EFX10.AL_ECHO_DELAY, EFX10.AL_ECHO_MIN_DELAY);
|
||||
else if (passedValue > EFX10.AL_ECHO_MAX_DELAY)
|
||||
addEffectf(EFX10.AL_ECHO_DELAY, EFX10.AL_ECHO_MAX_DELAY);
|
||||
else
|
||||
addEffectf(EFX10.AL_ECHO_DELAY, passedValue);
|
||||
}
|
||||
|
||||
/** Sets the amount of feedback to echo back.
|
||||
* @param passedValue The new feedback volume of the echo effect
|
||||
*/
|
||||
public void setFeedback(float passedValue) {
|
||||
if (passedValue < EFX10.AL_ECHO_MIN_FEEDBACK)
|
||||
addEffectf(EFX10.AL_ECHO_FEEDBACK, EFX10.AL_ECHO_MIN_FEEDBACK);
|
||||
else if (passedValue > EFX10.AL_ECHO_MAX_FEEDBACK)
|
||||
addEffectf(EFX10.AL_ECHO_FEEDBACK, EFX10.AL_ECHO_MAX_FEEDBACK);
|
||||
else
|
||||
addEffectf(EFX10.AL_ECHO_FEEDBACK, passedValue);
|
||||
}
|
||||
|
||||
/** Sets the delay between each echo "tap".
|
||||
* @param passedValue The new delay time between each echo "tap"
|
||||
*/
|
||||
public void setLRDelay(float passedValue) {
|
||||
if (passedValue < EFX10.AL_ECHO_MIN_LRDELAY)
|
||||
addEffectf(EFX10.AL_ECHO_LRDELAY, EFX10.AL_ECHO_MIN_LRDELAY);
|
||||
else if (passedValue > EFX10.AL_ECHO_MAX_LRDELAY)
|
||||
addEffectf(EFX10.AL_ECHO_LRDELAY, EFX10.AL_ECHO_MAX_LRDELAY);
|
||||
else
|
||||
addEffectf(EFX10.AL_ECHO_LRDELAY, passedValue);
|
||||
}
|
||||
|
||||
/** Sets the amount of hard panning allowed for each echo.
|
||||
* @param passedValue The new level of flexibility for the echo effect's panning
|
||||
*/
|
||||
public void setSpread(float passedValue) {
|
||||
if (passedValue < EFX10.AL_ECHO_MIN_SPREAD)
|
||||
addEffectf(EFX10.AL_ECHO_SPREAD, EFX10.AL_ECHO_MIN_SPREAD);
|
||||
else if (passedValue > EFX10.AL_ECHO_MAX_SPREAD)
|
||||
addEffectf(EFX10.AL_ECHO_SPREAD, EFX10.AL_ECHO_MAX_SPREAD);
|
||||
else
|
||||
addEffectf(EFX10.AL_ECHO_SPREAD, passedValue);
|
||||
}
|
||||
}
|
||||
35
src/com/flibitijibibo/flibitEFX/EFXEffectReverb.java
Normal file
35
src/com/flibitijibibo/flibitEFX/EFXEffectReverb.java
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Ethan "flibitijibibo" Lee
|
||||
*
|
||||
* This file is part of flibitEFX.
|
||||
*
|
||||
* flibitEFX is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* flibitEFX is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with flibitEFX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.flibitijibibo.flibitEFX;
|
||||
|
||||
import org.lwjgl.openal.EFX10;
|
||||
|
||||
/**
|
||||
* @author Ethan "flibitijibibo" Lee
|
||||
*/
|
||||
|
||||
public class EFXEffectReverb extends EFXEffect {
|
||||
|
||||
/** Constructor creates a generic reverb effect. */
|
||||
public EFXEffectReverb() {
|
||||
super(EFX10.AL_EFFECT_REVERB);
|
||||
}
|
||||
|
||||
// TODO: Add methods for all AL_EFFECT_REVERB properties.
|
||||
}
|
||||
70
src/com/flibitijibibo/flibitEFX/EFXEffectRingModulator.java
Normal file
70
src/com/flibitijibibo/flibitEFX/EFXEffectRingModulator.java
Normal file
@@ -0,0 +1,70 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Ethan "flibitijibibo" Lee
|
||||
*
|
||||
* This file is part of flibitEFX.
|
||||
*
|
||||
* flibitEFX is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* flibitEFX is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with flibitEFX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.flibitijibibo.flibitEFX;
|
||||
|
||||
import org.lwjgl.openal.EFX10;
|
||||
|
||||
/**
|
||||
* @author Ethan "flibitijibibo" Lee
|
||||
*/
|
||||
|
||||
public class EFXEffectRingModulator extends EFXEffect {
|
||||
|
||||
public static final int SINUSOID = EFX10.AL_RING_MODULATOR_SINUSOID;
|
||||
public static final int SAWTOOTH = EFX10.AL_RING_MODULATOR_SAWTOOTH;
|
||||
public static final int SQUARE = EFX10.AL_RING_MODULATOR_SQUARE;
|
||||
|
||||
/** Constructor creates a generic ring modulator effect. */
|
||||
public EFXEffectRingModulator() {
|
||||
super(EFX10.AL_EFFECT_RING_MODULATOR);
|
||||
}
|
||||
|
||||
/** Sets the frequency of the ring modulator.
|
||||
* @param passedValue The new frequency of the ring modulator
|
||||
*/
|
||||
public void setFrequency(float passedValue) {
|
||||
if (passedValue > EFX10.AL_RING_MODULATOR_MAX_FREQUENCY)
|
||||
addEffectf(EFX10.AL_RING_MODULATOR_FREQUENCY, EFX10.AL_RING_MODULATOR_MAX_FREQUENCY);
|
||||
else if (passedValue < EFX10.AL_RING_MODULATOR_MIN_FREQUENCY)
|
||||
addEffectf(EFX10.AL_RING_MODULATOR_FREQUENCY, EFX10.AL_RING_MODULATOR_MIN_FREQUENCY);
|
||||
else
|
||||
addEffectf(EFX10.AL_RING_MODULATOR_FREQUENCY, passedValue);
|
||||
}
|
||||
|
||||
/** Sets the high-pass cutoff for the ring modulator.
|
||||
* @param passedValue The new cutoff value for the ring modulator high-pass filter
|
||||
*/
|
||||
public void setHighPassCutoff(float passedValue) {
|
||||
if (passedValue > EFX10.AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF)
|
||||
addEffectf(EFX10.AL_RING_MODULATOR_HIGHPASS_CUTOFF, EFX10.AL_RING_MODULATOR_MAX_HIGHPASS_CUTOFF);
|
||||
else if (passedValue < EFX10.AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF)
|
||||
addEffectf(EFX10.AL_RING_MODULATOR_HIGHPASS_CUTOFF, EFX10.AL_RING_MODULATOR_MIN_HIGHPASS_CUTOFF);
|
||||
else
|
||||
addEffectf(EFX10.AL_RING_MODULATOR_HIGHPASS_CUTOFF, passedValue);
|
||||
}
|
||||
|
||||
/** Sets the waveform of the ring modulator.
|
||||
* @param waveform Should be EFXEffectRingModulator.SINUSOID, SAWTOOTH or SQUARE
|
||||
*/
|
||||
public void setWaveform(int waveform) {
|
||||
if (waveform != SINUSOID && waveform != SAWTOOTH && waveform != SQUARE)
|
||||
return;
|
||||
addEffecti(EFX10.AL_RING_MODULATOR_WAVEFORM, waveform);
|
||||
}
|
||||
}
|
||||
59
src/com/flibitijibibo/flibitEFX/EFXFilter.java
Normal file
59
src/com/flibitijibibo/flibitEFX/EFXFilter.java
Normal file
@@ -0,0 +1,59 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Ethan "flibitijibibo" Lee
|
||||
*
|
||||
* This file is part of flibitEFX.
|
||||
*
|
||||
* flibitEFX is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* flibitEFX is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with flibitEFX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.flibitijibibo.flibitEFX;
|
||||
|
||||
import org.lwjgl.openal.EFX10;
|
||||
|
||||
/**
|
||||
* @author Ethan "flibitijibibo" Lee
|
||||
*/
|
||||
|
||||
public abstract class EFXFilter {
|
||||
|
||||
private int filterIndex;
|
||||
|
||||
/** Constructor creates an EFX effect slot containing a filter.
|
||||
* @param efxFilter The EFX10 filter type (i.e. EFX10.AL_FILTER_HIGHPASS)
|
||||
*/
|
||||
public EFXFilter(int efxFilter) {
|
||||
filterIndex = EFX10.alGenFilters();
|
||||
// TODO: Check to see if efxFilter is a valid AL_FILTER_TYPE.
|
||||
EFX10.alFilteri(filterIndex, EFX10.AL_FILTER_TYPE, efxFilter);
|
||||
}
|
||||
|
||||
/** Unloads the EFX filter. */
|
||||
public void killFilter() {
|
||||
EFX10.alDeleteFilters(filterIndex);
|
||||
}
|
||||
|
||||
/** Returns the index of the EFX filter.
|
||||
* @return The index of the EFX filter
|
||||
*/
|
||||
public int getIndex() {
|
||||
return filterIndex;
|
||||
}
|
||||
|
||||
/** Applies a filter property to this EFX filter.
|
||||
* @param passedProperty The EFX10 filter property
|
||||
* @param passedValue The EFX10 filter value
|
||||
*/
|
||||
protected void addFilter(int passedProperty, float passedValue) {
|
||||
EFX10.alFilterf(filterIndex, passedProperty, passedValue);
|
||||
}
|
||||
}
|
||||
47
src/com/flibitijibibo/flibitEFX/EFXFilterLowPass.java
Normal file
47
src/com/flibitijibibo/flibitEFX/EFXFilterLowPass.java
Normal file
@@ -0,0 +1,47 @@
|
||||
/*
|
||||
* Copyright (C) 2011 Ethan "flibitijibibo" Lee
|
||||
*
|
||||
* This file is part of flibitEFX.
|
||||
*
|
||||
* flibitEFX is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU Lesser General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* flibitEFX is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU Lesser General Public License for more details.
|
||||
* You should have received a copy of the GNU Lesser General Public License
|
||||
* along with flibitEFX. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
package com.flibitijibibo.flibitEFX;
|
||||
|
||||
import org.lwjgl.openal.EFX10;
|
||||
|
||||
/**
|
||||
* @author Ethan "flibitijibibo" Lee
|
||||
*/
|
||||
|
||||
public class EFXFilterLowPass extends EFXFilter {
|
||||
|
||||
/** Constructor creates a generic low-pass filter. */
|
||||
public EFXFilterLowPass() {
|
||||
super(EFX10.AL_FILTER_LOWPASS);
|
||||
}
|
||||
|
||||
/** Sets the gain of the low-pass filter.
|
||||
* @param passedValue The new value of the low-pass filter gain
|
||||
*/
|
||||
public void setGain(float passedValue) {
|
||||
addFilter(EFX10.AL_LOWPASS_GAIN, passedValue);
|
||||
}
|
||||
|
||||
/** Sets the gain of the low-pass filter's high frequencies.
|
||||
* @param passedValue The new value of the low-pass filter's HF gain
|
||||
*/
|
||||
public void setGainHF(float passedValue) {
|
||||
addFilter(EFX10.AL_LOWPASS_GAINHF, passedValue);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user