module polyplex.core.audio.effects.ringmod;
import polyplex.core.audio.effects;
import polyplex.core.audio.effect;
import openal;

/// A ring modulator
public class RingModEffect : AudioEffect {
public:
    this() {
        super(EffectType.RingModulation);
        setupDone();
    }

    @property float Frequency() {
        ALfloat val;
        alGetEffectf(id, AL_RING_MODULATOR_FREQUENCY, &val);
        return val;
    }

    @property void Frequency(ALfloat val) {
        alEffectf(id, AL_RING_MODULATOR_FREQUENCY, val);
    }

    @property float HighpassCutoff() {
        ALfloat val;
        alGetEffectf(id, AL_RING_MODULATOR_HIGHPASS_CUTOFF, &val);
        return val;
    }

    @property void HighpassCutoff(ALfloat val) {
        alEffectf(id, AL_RING_MODULATOR_HIGHPASS_CUTOFF, val);
    }

    @property WaveformType Waveform() {
        ALenum val;
        alGetEffecti(id, AL_RING_MODULATOR_WAVEFORM, &val);
        return cast(WaveformType)val;
    }

    @property void Waveform(WaveformType val) {
        alEffecti(id, AL_RING_MODULATOR_WAVEFORM, cast(ALuint)val);
    }
}