Что делает gen~ phasor()? (Перевод Max/MSP gen на C++)

У нас есть два места в одном и том же объекте gen~ code с фазором:

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() увеличивает его фазу, что происходит в конце блока кода.

Я прав?

Редактировать: Нет, этого не может быть, тогда зачем вам ставить частоту в вектор дважды? Это не изменило бы вывод по моей логике.

1 ответ

Из моих тестов 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;
};
Другие вопросы по тегам