gpt4 book ai didi

c++ - gen~ phasor() 是做什么的? (将 Max/MSP gen 转换为 C++)

转载 作者:行者123 更新时间:2023-12-02 10:24:43 25 4
gpt4 key购买 nike

我们在带有相量的同一个 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()在同一个 gen 代码框中两次?我们似乎不可能有两个时间值。除非...

...我们在对 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com