Named Effect parameters added. Unsupported effects disabled.

Unnamed parameter Effect setting is no longer functional.

--HG--
branch : minor
This commit is contained in:
Raidho
2017-01-06 08:41:27 +03:00
parent 9fd53ad46f
commit 42f89153ae
10 changed files with 683 additions and 322 deletions
+169 -21
View File
@@ -26,6 +26,49 @@
#include <map>
#include <vector>
template<typename T>
class LazierAndSlowerButEasilyArrayableStringMap
{
public:
struct Entry
{
const char *key;
T value;
};
LazierAndSlowerButEasilyArrayableStringMap()
{
}
LazierAndSlowerButEasilyArrayableStringMap(const std::vector<Entry> &entries)
{
for (auto entry : entries)
{
forward[entry.key] = entry.value;
reverse[entry.value] = entry.key;
}
}
bool find(const char *key, T &t)
{
if (forward.find(key) == forward.end())
return false;
t = forward[key];
return true;
}
bool find(T key, const char *&str)
{
if (reverse.find(key) == reverse.end())
return false;
str = reverse[key];
return true;
}
private:
std::map<std::string, T> forward;
std::map<T, const char*> reverse;
};
namespace love
{
namespace audio
@@ -36,29 +79,114 @@ class Effect
public:
enum Type
{
TYPE_BASIC, //not a real type
TYPE_REVERB,
TYPE_CHORUS,
TYPE_DISTORTION,
TYPE_ECHO,
TYPE_FLANGER,
TYPE_FREQSHIFTER,
TYPE_MORPHER,
TYPE_PITCHSHIFTER,
//TYPE_FREQSHIFTER,
//TYPE_MORPHER,
//TYPE_PITCHSHIFTER,
TYPE_MODULATOR,
TYPE_AUTOWAH,
//TYPE_AUTOWAH,
TYPE_COMPRESSOR,
TYPE_EQUALIZER,
TYPE_MAX_ENUM
};
enum Parameter
{
EFFECT_TYPE,
EFFECT_VOLUME,
REVERB_GAIN,
REVERB_HFGAIN,
REVERB_DENSITY,
REVERB_DIFFUSION,
REVERB_DECAY,
REVERB_HFDECAY,
REVERB_EARLYGAIN,
REVERB_EARLYDELAY,
REVERB_LATEGAIN,
REVERB_LATEDELAY,
REVERB_ROLLOFF,
REVERB_AIRHFGAIN,
REVERB_HFLIMITER,
CHORUS_WAVEFORM,
CHORUS_PHASE,
CHORUS_RATE,
CHORUS_DEPTH,
CHORUS_FEEDBACK,
CHORUS_DELAY,
DISTORTION_GAIN,
DISTORTION_EDGE,
DISTORTION_LOWCUT,
DISTORTION_EQCENTER,
DISTORTION_EQBAND,
ECHO_DELAY,
ECHO_LRDELAY,
ECHO_DAMPING,
ECHO_FEEDBACK,
ECHO_SPREAD,
FLANGER_WAVEFORM,
FLANGER_PHASE,
FLANGER_RATE,
FLANGER_DEPTH,
FLANGER_FEEDBACK,
FLANGER_DELAY,
/*
FREQSHIFTER_FREQ,
FREQSHIFTER_LEFTDIR,
FREQSHIFTER_RIGHTDIR,
MORPHER_WAVEFORM,
MORPHER_RATE,
MORPHER_PHONEMEA,
MORPHER_PHONEMEB,
MORPHER_TUNEA,
MORPHER_TUNEB,
PITCHSHIFTER_PITCH,
*/
MODULATOR_WAVEFORM,
MODULATOR_FREQ,
MODULATOR_HIGHCUT,
/*
AUTOWAH_ATTACK,
AUTOWAH_RELEASE,
AUTOWAH_RESONANCE,
AUTOWAH_PEAKGAIN,
*/
COMPRESSOR_ENABLE,
EQUALIZER_LOWGAIN,
EQUALIZER_LOWCUT,
EQUALIZER_MID1GAIN,
EQUALIZER_MID1FREQ,
EQUALIZER_MID1BAND,
EQUALIZER_MID2GAIN,
EQUALIZER_MID2FREQ,
EQUALIZER_MID2BAND,
EQUALIZER_HIGHGAIN,
EQUALIZER_HIGHCUT,
EFFECT_MAX_ENUM
};
enum ParameterType
{
PAR_FLOAT,
PAR_BOOL,
PAR_WAVEFORM,
PAR_DIRECTION,
PAR_PHONEME,
PAR_MAX_ENUM
PARAM_TYPE,
PARAM_FLOAT,
PARAM_BOOL,
PARAM_WAVEFORM,
//PARAM_DIRECTION,
//PARAM_PHONEME,
PARAM_MAX_ENUM
};
enum Waveform
@@ -69,7 +197,7 @@ public:
WAVE_SQUARE,
WAVE_MAX_ENUM
};
/*
enum Direction
{
DIR_NONE,
@@ -112,6 +240,7 @@ public:
PHONEME_Z,
PHONEME_MAX_ENUM
};
*/
Effect();
virtual ~Effect();
@@ -121,11 +250,13 @@ public:
static bool getConstant(Type in, const char *&out);
static bool getConstant(const char *in, Waveform &out);
static bool getConstant(Waveform in, const char *&out);
static bool getConstant(const char *in, Direction &out);
static bool getConstant(Direction in, const char *&out);
static bool getConstant(const char *in, Phoneme &out);
static bool getConstant(Phoneme in, const char *&out);
static const std::vector<ParameterType> &getParameterTypes(Type in);
//static bool getConstant(const char *in, Direction &out);
//static bool getConstant(Direction in, const char *&out);
//static bool getConstant(const char *in, Phoneme &out);
//static bool getConstant(Phoneme in, const char *&out);
static bool getConstant(const char *in, Parameter &out, Type t);
static bool getConstant(Parameter in, const char *&out, Type t);
static ParameterType getParameterType(Parameter in);
protected:
Type type;
@@ -135,11 +266,28 @@ private:
static StringMap<Type, TYPE_MAX_ENUM> types;
static StringMap<Waveform, WAVE_MAX_ENUM>::Entry waveformEntries[];
static StringMap<Waveform, WAVE_MAX_ENUM> waveforms;
static StringMap<Direction, DIR_MAX_ENUM>::Entry directionEntries[];
static StringMap<Direction, DIR_MAX_ENUM> directions;
static StringMap<Phoneme, PHONEME_MAX_ENUM>::Entry phonemeEntries[];
static StringMap<Phoneme, PHONEME_MAX_ENUM> phonemes;
static std::map<Type, std::vector<Effect::ParameterType>> parameterTypes;
//static StringMap<Direction, DIR_MAX_ENUM>::Entry directionEntries[];
//static StringMap<Direction, DIR_MAX_ENUM> directions;
//static StringMap<Phoneme, PHONEME_MAX_ENUM>::Entry phonemeEntries[];
//static StringMap<Phoneme, PHONEME_MAX_ENUM> phonemes;
#define StringMap LazierAndSlowerButEasilyArrayableStringMap
static std::vector<StringMap<Effect::Parameter>::Entry> basicParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> reverbParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> chorusParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> distortionParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> echoParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> flangerParameters;
//static std::vector<StringMap<Effect::Parameter>::Entry> freqshifterParameters;
//static std::vector<StringMap<Effect::Parameter>::Entry> morpherParameters;
//static std::vector<StringMap<Effect::Parameter>::Entry> pitchshifterParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> modulatorParameters;
//static std::vector<StringMap<Effect::Parameter>::Entry> autowahParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> compressorParameters;
static std::vector<StringMap<Effect::Parameter>::Entry> equalizerParameters;
static std::map<Type, StringMap<Parameter>> parameterNames;
#undef StringMap
static std::map<Parameter, ParameterType> parameterTypes;
};
} //audio