我们在具有相量的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/