这是一个合理的做法吗?指向另一个类数据的指针

问题描述 投票:0回答:0

我在 90 年代学习了 C 和 C++,现在才重新开始学习。我正在努力构建一个合成器。最终在 DSP 板上,但现在,在我的计算机上为其构建框架。我已经得到它解析 MIDI 并定义了所有合成器参数和一个 QT GUI 来验证参数的缩放是否正常工作以及复音是否被正确处理。所以,现在我正在努力构建应用这些参数的控制路径。

我有一个名为 SynthParameters 的类来控制这些。我实例化了一个 SynthParameters 数组。现在我正在寻找处理单个音符频率的修改,所以我有一个名为 VCOFreqmod 的类,它将处理诸如失谐、振荡器的八度音阶、颤音等事物的调制……所以。我正在创建指向值(公共类成员)的浮点指针,构造函数将接收该参数的 SynthParameter 地址并链接到 ParamValue。

我的问题是,这是在正确的轨道上吗?我把自己画到角落里了吗? SynthParameters 将在我创建 VCOFreqmod 实例时实例化,所以这似乎是合理的,但我愿意被告知其他情况。

好的,代码:

class VCOFreqmod {
private:
    float * Master_Tune;
    float * DetuneLR;
    float * Sine_Octave;
    float * Saw_Octave;
    float * Pulse_Oct;
    float * Vibrato_Depth;
    float * Vibrato_Rate;
    float * Portatime;
    float * SinePortamento;
    float * SawPortamento;
    float * SquarePortamento;

public:
    VCOFreqmod( SynthParameter mastertune,
                SynthParameter detunelr,
                SynthParameter sine_oct,
                SynthParameter saw_oct,
                SynthParameter pulse_oct,
                SynthParameter vibrato_depth,
                SynthParameter vibrato_rate,
                SynthParameter portatime,
                SynthParameter sineportamento,
                SynthParameter sawportamento,
                SynthParameter squareportamento) {
        Master_Tune=&mastertune.ParamValue;
        DetuneLR=&detunelr.ParamValue;
        Sine_Octave=&sine_oct.ParamValue;
        Vibrato_Depth=&vibrato_depth.ParamValue;
        Vibrato_Rate=&vibrato_rate.ParamValue;
        Portatime=&portatime.ParamValue;
        SinePortamento=&sineportamento.ParamValue;
        SawPortamento=&sawportamento.ParamValue;
        SquarePortamento=&squareportamento.ParamValue;
    }
    float MtoF(int midinotenum) {
        return 13.75*pow(2,(midinotenum-9)/12);
    }

    float setOctave(float frequency,int offset) {
        if (offset==1)       { return frequency*2; }
        else if (offset==-1) { return frequency/2; }
        return frequency;
    }


};

我只是在写这段代码并在网上寻找类似的例子,但运气不佳。我真的很想找人面对面告诉我我是个菜鸟,然后重新开始。或者,说这是一种合理的方法。我现在问,因为我至少有更多的东西要写,VCA、VCO、VCF 和 FX,它们将基于相同的方法。我什至还没有为这个写数学部分。我不想进行查找,只是使用现成的值在代码的 DSP 部分中用于计算。

c++ signal-processing
© www.soinside.com 2019 - 2024. All rights reserved.