From c9fa4bf413bd38e777becd2e92070f8b44dbeab3 Mon Sep 17 00:00:00 2001 From: DmitriyMX Date: Fri, 12 May 2017 01:49:39 +0300 Subject: [PATCH] flibitEFX source --- build.gradle | 1 - lib/flibitEFX.jar | Bin 10659 -> 0 bytes .../flibitijibibo/flibitEFX/EFXEffect.java | 71 +++++++++++++ .../flibitEFX/EFXEffectEcho.java | 93 ++++++++++++++++++ .../flibitEFX/EFXEffectReverb.java | 35 +++++++ .../flibitEFX/EFXEffectRingModulator.java | 70 +++++++++++++ .../flibitijibibo/flibitEFX/EFXFilter.java | 59 +++++++++++ .../flibitEFX/EFXFilterLowPass.java | 47 +++++++++ 8 files changed, 375 insertions(+), 1 deletion(-) delete mode 100644 lib/flibitEFX.jar create mode 100644 src/com/flibitijibibo/flibitEFX/EFXEffect.java create mode 100644 src/com/flibitijibibo/flibitEFX/EFXEffectEcho.java create mode 100644 src/com/flibitijibibo/flibitEFX/EFXEffectReverb.java create mode 100644 src/com/flibitijibibo/flibitEFX/EFXEffectRingModulator.java create mode 100644 src/com/flibitijibibo/flibitEFX/EFXFilter.java create mode 100644 src/com/flibitijibibo/flibitEFX/EFXFilterLowPass.java diff --git a/build.gradle b/build.gradle index 6e79482..b0269b9 100644 --- a/build.gradle +++ b/build.gradle @@ -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 { diff --git a/lib/flibitEFX.jar b/lib/flibitEFX.jar deleted file mode 100644 index 4ec68592177bb9291cf3f822c83777f097bc0ab2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10659 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 diff --git a/src/com/flibitijibibo/flibitEFX/EFXEffect.java b/src/com/flibitijibibo/flibitEFX/EFXEffect.java new file mode 100644 index 0000000..0522e92 --- /dev/null +++ b/src/com/flibitijibibo/flibitEFX/EFXEffect.java @@ -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 . + */ + +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); + } +} \ No newline at end of file diff --git a/src/com/flibitijibibo/flibitEFX/EFXEffectEcho.java b/src/com/flibitijibibo/flibitEFX/EFXEffectEcho.java new file mode 100644 index 0000000..9e46ef3 --- /dev/null +++ b/src/com/flibitijibibo/flibitEFX/EFXEffectEcho.java @@ -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 . + */ + +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); + } +} \ No newline at end of file diff --git a/src/com/flibitijibibo/flibitEFX/EFXEffectReverb.java b/src/com/flibitijibibo/flibitEFX/EFXEffectReverb.java new file mode 100644 index 0000000..87b13c0 --- /dev/null +++ b/src/com/flibitijibibo/flibitEFX/EFXEffectReverb.java @@ -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 . + */ + +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. +} \ No newline at end of file diff --git a/src/com/flibitijibibo/flibitEFX/EFXEffectRingModulator.java b/src/com/flibitijibibo/flibitEFX/EFXEffectRingModulator.java new file mode 100644 index 0000000..78d3d7b --- /dev/null +++ b/src/com/flibitijibibo/flibitEFX/EFXEffectRingModulator.java @@ -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 . + */ + +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); + } +} \ No newline at end of file diff --git a/src/com/flibitijibibo/flibitEFX/EFXFilter.java b/src/com/flibitijibibo/flibitEFX/EFXFilter.java new file mode 100644 index 0000000..6f708a5 --- /dev/null +++ b/src/com/flibitijibibo/flibitEFX/EFXFilter.java @@ -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 . + */ + +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); + } +} \ No newline at end of file diff --git a/src/com/flibitijibibo/flibitEFX/EFXFilterLowPass.java b/src/com/flibitijibibo/flibitEFX/EFXFilterLowPass.java new file mode 100644 index 0000000..1c7858d --- /dev/null +++ b/src/com/flibitijibibo/flibitEFX/EFXFilterLowPass.java @@ -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 . + */ + +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); + } +} \ No newline at end of file