mirror of
https://github.com/yokemura/Magical8bitPlug2.git
synced 2025-05-24 23:00:21 -04:00
63 lines
1.6 KiB
C++
63 lines
1.6 KiB
C++
/*
|
|
==============================================================================
|
|
|
|
PulseVoice.cpp
|
|
Created: 11 Nov 2019 9:36:51pm
|
|
Author: 除村 武志
|
|
|
|
==============================================================================
|
|
*/
|
|
|
|
#include "PulseVoice.h"
|
|
|
|
//---------------------------------------------
|
|
//
|
|
// Pulse Voice
|
|
//
|
|
//---------------------------------------------
|
|
PulseVoice::PulseVoice (SettingRefs* sRefs) : TonalVoice (sRefs) {}
|
|
|
|
void PulseVoice::startNote (int midiNoteNumber, float velocity, SynthesiserSound*, int currentPitchBendPosition)
|
|
{
|
|
TonalVoice::startNote (midiNoteNumber, velocity, 0, currentPitchBendPosition);
|
|
|
|
currentDutySequenceFrame = 0;
|
|
currentDuty = (PulseDuty) ((int) (*settingRefs->duty));
|
|
}
|
|
|
|
float PulseVoice::voltageForAngle (double angle)
|
|
{
|
|
float rate = 1.0;
|
|
|
|
switch (currentDuty)
|
|
{
|
|
case kPulseDuty125:
|
|
rate = 0.25;
|
|
break;
|
|
|
|
case kPulseDuty250:
|
|
rate = 0.50;
|
|
break;
|
|
|
|
case kPulseDuty500:
|
|
rate = 1.00;
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
return angle < rate * MathConstants<float>::pi ? -1.0 : 1.0;
|
|
}
|
|
|
|
void PulseVoice::advanceControlFrame()
|
|
{
|
|
TonalVoice::advanceControlFrame();
|
|
|
|
if (settingRefs->isDutySequenceEnabled())
|
|
{
|
|
currentDutySequenceFrame = settingRefs->dutySequence.nextIndexOf (currentDutySequenceFrame);
|
|
currentDuty = (PulseDuty)settingRefs->dutySequence.valueAt (currentDutySequenceFrame);
|
|
}
|
|
}
|