Program Listing for File ManualMix.hpp

Return to documentation for file (include\audioRender\ManualMix\ManualMix.hpp)

#pragma once

#include <memory>

#include "FAUST_COMPRESSOR_manual.hpp"
#include "FAUST_DISTORTION_manual.hpp"
#include "FAUST_ECHO_manual.hpp"
#include "FAUST_EQ_manual.hpp"
#include "FAUST_FILTERS_manual.hpp"
#include "FAUST_FLANGER_manual.hpp"
#include "FAUST_OCS_FILTER_manual.hpp"
#include "FAUST_PANNER_manual.hpp"
#include "FAUST_PHASER_manual.hpp"
#include "FAUST_ROBOT_manual.hpp"
#include "FAUST_ROLL_manual.hpp"
#include "FAUST_TRANCE_manual.hpp"
#include "FAUST_VOL_manual.hpp"

#include "FrameCalc.hpp"
#include "musicDB.hpp"

#include "PDJE_EXPORT_SETTER.hpp"

enum FXList {
    COMPRESSOR = 0,
    DISTORTION,
    ECHO,
    EQ,
    FILTER,
    FLANGER,
    OCSFILTER,
    PANNER,
    PHASER,
    ROBOT,
    ROLL,
    TRANCE,
    VOL
};

class PDJE_API FXControlPannel {
  private:
    std::pair<bool, CompressorFAUSTMan> compressorPannel;
    std::pair<bool, DistortionFAUSTMan> distortionPannel;
    std::pair<bool, EchoFAUSTMan>       echoPannel;
    std::pair<bool, EQFAUSTMan>         eqPannel;
    std::pair<bool, FilterFAUSTMan>     filterPannel;
    std::pair<bool, FlangerFAUSTMan>    flangerPannel;
    std::pair<bool, OcsFilterFAUSTMan>  ocsFilterPannel;
    std::pair<bool, PannerFAUSTMan>     pannerPannel;
    std::pair<bool, PhaserFAUSTMan>     phaserPannel;
    std::pair<bool, RobotFAUSTMan>      robotPannel;
    std::pair<bool, RollFAUSTMan>       rollPannel;
    std::pair<bool, TranceFAUSTMan>     trancePannel;
    std::pair<bool, VolFAUSTMan>        volPannel;

    template <typename ManName>
    void
    checkAndUse(float **pcm, int samples, ManName &man)
    {
        if (man.first) {
            man.second.compute(samples, pcm, pcm);
        }
    }

  public:
    FXControlPannel(int sampleRate);
    ARGSETTER
    GetArgSetter(FXList fx);
    void
    FX_ON_OFF(FXList fx, bool onoff);

    void
    addFX(float **pcm, int samples);

    bool
    checkSomethingOn();
};

inline void
toFaustStylePCM(float **faustPCM, float *in, const unsigned long frameCount)
{
    float *op = in;
    float *lp = faustPCM[0];
    float *rp = faustPCM[1];
    for (int i = 0; i < frameCount; ++i) {
        *(lp++) = *(op++);
        *(rp++) = *(op++);
    }
}

inline void
toLRStylePCM(float **faustPCM, float *out, const unsigned long frameCount)
{
    float *op = out;
    float *lp = faustPCM[0];
    float *rp = faustPCM[1];
    for (int i = 0; i < frameCount; ++i) {
        *(op++) = *(lp++);
        *(op++) = *(rp++);
    }
}