我们在具有相量的gen〜代码框对象中有两个位置:

wander = phasor(in8/dense);

...some code later...

phas = (triangle(phasor(freq), sharp)*len-rot_x/(2*pi))%1;

我知道phasor()会产生一个上升的锯齿,输出值为0到1。我知道phasor()的参数是频率。我不明白的是,在给定频率下phasor()如何输出0到1的值,这时您将需要一段时间内的频率来产生非0的值。似乎phasor(frequency)应该总是输出0,除非phasor()保持跟踪时间和它自己的阶段。

如果相量跟踪时间/相位,我们如何在同一个发电代码框中两次调用phasor()?我们有两个时间值似乎是不可能的。除非...

...我们在所有对phasor()的调用之间共享一个时间/相位值,但这是对phasor()的最后一次调用,它设置了phasor()增加其相位之前的最终频率,该频率发生在代码块的末尾。

我对么?

编辑:不,那不可能,那你为什么要两次将频率放入相量?按照我的逻辑,它不会改变输出。

最佳答案

根据我的测试,相量确实是一个锯齿状振荡器对象,其中对相量的每次调用都是唯一的振荡器,因此,在同一代码框中两次调用相量将实例化两个对象。

class Phasor
{
public:
    double getSample()
    {
        double ret = phase/PI_z_2;
        phase = fmod(phase+phase_inc, TAU); //increment phase
        return ret;
    }
    void setSampleRate(double v) { sampleRate = v; calculateIncrement(); }
    void setFrequency(double v) { frequency = v; calculateIncrement(); }
    void reset() { phase = 0.0; }
protected:
    void calculateIncrement() { phase_inc = TAU * frequency / sampleRate; }
    double sampleRate = 44100.0;
    double frequency = 1.0;
    double phase = 0.0;
    double phase_inc = 0.0;
    const double TAU = 2*PI;
    const double PI_z_2 = PI/2.0;
};

关于c++ - gen〜phasor()有什么作用? (将Max/MSP gen转换为C++),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46099479/

10-11 04:38