mirror of
https://github.com/yokemura/Magical8bitPlug2.git
synced 2025-12-14 17:12:43 -05:00
Legato
This commit is contained in:
@ -13,7 +13,6 @@
|
||||
|
||||
struct TonalVoice : public BaseVoice // The base for Pulse and Triangle
|
||||
{
|
||||
|
||||
TonalVoice (SettingRefs* sRefs);
|
||||
float voltageForAngle (double angle) override = 0;
|
||||
|
||||
@ -35,6 +34,18 @@ struct TonalVoice : public BaseVoice // The base for Pulse and Triangle
|
||||
|
||||
// Custom Pitch/Note states
|
||||
int currentPitchSequenceFrame = 0;
|
||||
|
||||
// Legato/Arpeggio
|
||||
int noteBuffer[10];
|
||||
int currentNumNoteBuffer = 0;
|
||||
|
||||
// Legato
|
||||
double portamentoTime = 0;
|
||||
|
||||
// Arpeggio
|
||||
int currentArpeggioFrame = 0;
|
||||
double arpeggioFrameTimer = 0;
|
||||
double arpeggioFrameLength = 0; // Unit: seconds. Set non-zero value to enable arpeggio
|
||||
|
||||
void startNote (int midiNoteNumber, float velocity,
|
||||
SynthesiserSound*, int currentPitchWheelPosition) override;
|
||||
@ -43,7 +54,92 @@ struct TonalVoice : public BaseVoice // The base for Pulse and Triangle
|
||||
void pitchWheelMoved (int) override;
|
||||
void controllerMoved (int, int) override;
|
||||
|
||||
void setLegatoMode(double time);
|
||||
void addLegatoNote (int midiNoteNumber, float velocity);
|
||||
int removeLegatoNote(int midiNoteNumber);
|
||||
|
||||
void setArpeggioMode(double interval);
|
||||
void addArpeggioNoteAscending(int midiNoteNumber);
|
||||
void addArpeggioNoteDescending(int midiNoteNumber);
|
||||
int removeArpeggioNote(int midiNoteNumber);
|
||||
|
||||
void pushNoteBuffer(int index, int value);
|
||||
void shiftNoteBuffer(int index);
|
||||
|
||||
double noteNoToHeltzDouble (double noteNoInDouble, const double frequencyOfA = 440);
|
||||
|
||||
void onFrameAdvanced() override;
|
||||
|
||||
bool isArpeggioEnabled() {
|
||||
return arpeggioFrameLength > 0;
|
||||
}
|
||||
|
||||
/*
|
||||
void testArpeggioNotes() {
|
||||
startNote(100, 1, NULL, 0);
|
||||
|
||||
setArpeggioMode(1.0);
|
||||
jassert(isArpeggioEnabled());
|
||||
jassert(arpeggioNotes[0] == 100);
|
||||
jassert(currentNumArpeggioNotes == 1);
|
||||
|
||||
addArpeggioNoteAscending(90);
|
||||
jassert(arpeggioNotes[0] == 90);
|
||||
jassert(arpeggioNotes[1] == 100);
|
||||
jassert(currentNumArpeggioNotes == 2);
|
||||
|
||||
addArpeggioNoteAscending(95);
|
||||
jassert(arpeggioNotes[0] == 90);
|
||||
jassert(arpeggioNotes[1] == 95);
|
||||
jassert(arpeggioNotes[2] == 100);
|
||||
jassert(currentNumArpeggioNotes == 3);
|
||||
|
||||
jassert(removeArpeggioNote(92) == 3);
|
||||
jassert(arpeggioNotes[0] == 90);
|
||||
jassert(arpeggioNotes[1] == 95);
|
||||
jassert(arpeggioNotes[2] == 100);
|
||||
|
||||
jassert(removeArpeggioNote(100) == 2);
|
||||
jassert(arpeggioNotes[0] == 90);
|
||||
jassert(arpeggioNotes[1] == 95);
|
||||
|
||||
jassert(removeArpeggioNote(90) == 1);
|
||||
jassert(arpeggioNotes[0] == 95);
|
||||
|
||||
jassert(removeArpeggioNote(95) == 0);
|
||||
|
||||
|
||||
startNote(100, 1, NULL, 0);
|
||||
|
||||
setArpeggioMode(1.0);
|
||||
jassert(isArpeggioEnabled());
|
||||
jassert(arpeggioNotes[0] == 100);
|
||||
jassert(currentNumArpeggioNotes == 1);
|
||||
|
||||
addArpeggioNoteDescending(90);
|
||||
jassert(arpeggioNotes[0] == 100);
|
||||
jassert(arpeggioNotes[1] == 90);
|
||||
jassert(currentNumArpeggioNotes == 2);
|
||||
|
||||
addArpeggioNoteDescending(95);
|
||||
jassert(arpeggioNotes[0] == 100);
|
||||
jassert(arpeggioNotes[1] == 95);
|
||||
jassert(arpeggioNotes[2] == 90);
|
||||
jassert(currentNumArpeggioNotes == 3);
|
||||
|
||||
jassert(removeArpeggioNote(92) == 3);
|
||||
jassert(arpeggioNotes[0] == 100);
|
||||
jassert(arpeggioNotes[1] == 95);
|
||||
jassert(arpeggioNotes[2] == 90);
|
||||
|
||||
jassert(removeArpeggioNote(100) == 2);
|
||||
jassert(arpeggioNotes[0] == 95);
|
||||
jassert(arpeggioNotes[1] == 90);
|
||||
|
||||
jassert(removeArpeggioNote(90) == 1);
|
||||
jassert(arpeggioNotes[0] == 95);
|
||||
|
||||
jassert(removeArpeggioNote(95) == 0);
|
||||
}
|
||||
*/
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user