Implementing per-op arpeggio/pitch macro
Co-authored-by: LTVA1 <87536432+LTVA1@users.noreply.github.com>
This commit is contained in:
parent
215c8c375a
commit
4459a7d659
4 changed files with 103 additions and 16 deletions
|
|
@ -36,13 +36,77 @@ class DivPlatformESFM: public DivDispatch {
|
|||
bool hardReset;
|
||||
unsigned char globalPan;
|
||||
int macroVolMul;
|
||||
struct {
|
||||
int baseNoteOverride;
|
||||
bool fixedArp;
|
||||
int arpOff;
|
||||
int pitch2;
|
||||
bool hasOpArp;
|
||||
bool hasOpPitch;
|
||||
} opsState[4];
|
||||
|
||||
void handleArpFmOp(int offset=0, int o=0) {
|
||||
DivMacroInt::IntOp& m=this->std.op[o];
|
||||
if (m.ssg.had) {
|
||||
opsState[o].hasOpArp=true;
|
||||
|
||||
if (m.ssg.val<0) {
|
||||
if (!(m.ssg.val&0x40000000)) {
|
||||
opsState[o].baseNoteOverride=(m.ssg.val|0x40000000)+offset;
|
||||
opsState[o].fixedArp=true;
|
||||
} else {
|
||||
opsState[o].arpOff=m.ssg.val;
|
||||
opsState[o].fixedArp=false;
|
||||
}
|
||||
} else {
|
||||
if (m.ssg.val&0x40000000) {
|
||||
opsState[o].baseNoteOverride=(m.ssg.val&(~0x40000000))+offset;
|
||||
opsState[o].fixedArp=true;
|
||||
} else {
|
||||
opsState[o].arpOff=m.ssg.val;
|
||||
opsState[o].fixedArp=false;
|
||||
}
|
||||
}
|
||||
freqChanged=true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
opsState[o].hasOpArp=false;
|
||||
}
|
||||
}
|
||||
|
||||
void handlePitchFmOp(int o)
|
||||
{
|
||||
DivMacroInt::IntOp& m=this->std.op[o];
|
||||
|
||||
if (m.dt.had) {
|
||||
opsState[o].hasOpPitch=true;
|
||||
|
||||
if (m.dt.mode) {
|
||||
opsState[o].pitch2+=m.dt.val;
|
||||
CLAMP_VAR(opsState[o].pitch2,-131071,131071);
|
||||
} else {
|
||||
opsState[o].pitch2=m.dt.val;
|
||||
}
|
||||
this->freqChanged=true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
opsState[o].hasOpPitch=false;
|
||||
}
|
||||
}
|
||||
|
||||
Channel():
|
||||
SharedChannel<int>(0),
|
||||
freqL{0, 0, 0, 0},
|
||||
freqH{0, 0, 0, 0},
|
||||
hardReset(false),
|
||||
globalPan(3),
|
||||
macroVolMul(64) {}
|
||||
macroVolMul(64) {
|
||||
memset(opsState, 0, sizeof(opsState));
|
||||
}
|
||||
};
|
||||
Channel chan[18];
|
||||
DivDispatchOscBuffer* oscBuf[18];
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue