但它发出的声音和我预想的不一样。
我的代码是:
class Phasor
{
public:
Phasor(const float frequency)
:frequency(frequency)
,phase(1.0f)
,lastTimeMicros(0){};
virtual ~Phasor(){};
void setFrequency(const float frequency)
{
this->frequency = frequency;
}
float process()
{
const unsigned long currentTimeMicros = micros();
if (phase == 1.0f) lastTimeMicros = currentTimeMicros;
const unsigned long elapsedTimeMicros = currentTimeMicros - lastTimeMicros;
const unsigned long cycleDurationMicros = static_cast<unsigned long>(1000.0f / frequency) * 1000;
if (elapsedTimeMicros < cycleDurationMicros)
phase = static_cast<float>(elapsedTimeMicros) / static_cast<float>(cycleDurationMicros);
else
phase = 1.0f;
return phase;
}
private:
float frequency;
float phase;
unsigned long lastTimeMicros;
};
class PulseOsc
{
public:
PulseOsc(const float frequency, const float pulseWidth)
:phasor(frequency)
,pulseWidth(pulseWidth){};
virtual ~PulseOsc(){};
void setFrequency(const float frequency)
{
this->phasor.setFrequency(frequency);
}
void setPulseWidth(const float pulseWidth)
{
this->pulseWidth = pulseWidth;
}
float process()
{
const float phase = phasor.process();
if (phase <= pulseWidth)
return 1.0f;
else
return -1.0f;
}
private:
Phasor phasor;
float pulseWidth;
};
Phasor *phasorLFO;
PulseOsc *pulseOsc;
void setup()
{
Serial.begin(9600);
pinMode(9, OUTPUT);
phasorLFO = new Phasor(0.1f);
pulseOsc = new PulseOsc(440.0f, 0.5f);
}
void loop()
{
pulseOsc->setPulseWidth(phasorLFO->process());
int outVal = LOW;
if (pulseOsc->process() > 0.0f) outVal = HIGH;
digitalWrite(9, outVal);
}
由此产生的声音非常怪异和不连贯。
我的代码怎么了?