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

Я прав?

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

0

Решение

Из моих тестов 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;
};
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector