MSM5232: oh come on why didn't I commit this?
This commit is contained in:
parent
8ab0d28ace
commit
263982719d
|
@ -52,7 +52,6 @@ void DivPlatformMSM5232::acquire(short* bufL, short* bufR, size_t start, size_t
|
||||||
regPool[w.addr&0x0f]=w.val;
|
regPool[w.addr&0x0f]=w.val;
|
||||||
writes.pop();
|
writes.pop();
|
||||||
}
|
}
|
||||||
memset(temp,0,16*sizeof(short));
|
|
||||||
|
|
||||||
for (int i=0; i<8; i++) {
|
for (int i=0; i<8; i++) {
|
||||||
int o=(
|
int o=(
|
||||||
|
@ -64,7 +63,15 @@ void DivPlatformMSM5232::acquire(short* bufL, short* bufR, size_t start, size_t
|
||||||
oscBuf[i]->data[oscBuf[i]->needle++]=CLAMP(o,-32768,32767);
|
oscBuf[i]->data[oscBuf[i]->needle++]=CLAMP(o,-32768,32767);
|
||||||
}
|
}
|
||||||
|
|
||||||
msm->sound_stream_update(temp);
|
clockDriftLFOPos+=clockDriftLFOSpeed;
|
||||||
|
clockDriftLFOPos&=(1U<<21)-1;
|
||||||
|
clockDriftAccum+=clockDriftLFOWave[clockDriftLFOPos>>13];
|
||||||
|
if (clockDriftAccum>=2048) {
|
||||||
|
clockDriftAccum-=2048;
|
||||||
|
} else {
|
||||||
|
memset(temp,0,16*sizeof(short));
|
||||||
|
msm->sound_stream_update(temp);
|
||||||
|
}
|
||||||
|
|
||||||
//printf("tempL: %d tempR: %d\n",tempL,tempR);
|
//printf("tempL: %d tempR: %d\n",tempL,tempR);
|
||||||
bufL[h]=0;
|
bufL[h]=0;
|
||||||
|
@ -328,6 +335,8 @@ void DivPlatformMSM5232::reset() {
|
||||||
cycles=0;
|
cycles=0;
|
||||||
curChan=-1;
|
curChan=-1;
|
||||||
delay=500;
|
delay=500;
|
||||||
|
clockDriftLFOPos=0;
|
||||||
|
clockDriftAccum=0;
|
||||||
|
|
||||||
for (int i=0; i<2; i++) {
|
for (int i=0; i<2; i++) {
|
||||||
groupControl[i]=15|(groupEnv[i]?0x20:0);
|
groupControl[i]=15|(groupEnv[i]?0x20:0);
|
||||||
|
@ -399,6 +408,11 @@ void DivPlatformMSM5232::setFlags(const DivConfig& flags) {
|
||||||
capacitance[6]*0.000000001,
|
capacitance[6]*0.000000001,
|
||||||
capacitance[7]*0.000000001
|
capacitance[7]*0.000000001
|
||||||
);
|
);
|
||||||
|
|
||||||
|
for (int i=0; i<256; i++) {
|
||||||
|
clockDriftLFOWave[i]=(1.0+sin(M_PI*(double)i/128.0))*flags.getInt("vibDepth",0.0f);
|
||||||
|
}
|
||||||
|
clockDriftLFOSpeed=flags.getInt("vibSpeed",0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DivPlatformMSM5232::poke(unsigned int addr, unsigned short val) {
|
void DivPlatformMSM5232::poke(unsigned int addr, unsigned short val) {
|
||||||
|
|
|
@ -57,6 +57,7 @@ class DivPlatformMSM5232: public DivDispatch {
|
||||||
DivDispatchOscBuffer* oscBuf[8];
|
DivDispatchOscBuffer* oscBuf[8];
|
||||||
int partVolume[8];
|
int partVolume[8];
|
||||||
int initPartVolume[8];
|
int initPartVolume[8];
|
||||||
|
int clockDriftLFOWave[256];
|
||||||
double capacitance[8];
|
double capacitance[8];
|
||||||
bool isMuted[8];
|
bool isMuted[8];
|
||||||
bool updateGroup[2];
|
bool updateGroup[2];
|
||||||
|
@ -73,7 +74,8 @@ class DivPlatformMSM5232: public DivDispatch {
|
||||||
};
|
};
|
||||||
std::queue<QueuedWrite> writes;
|
std::queue<QueuedWrite> writes;
|
||||||
|
|
||||||
int cycles, curChan, delay, detune;
|
int cycles, curChan, delay, detune, clockDriftAccum;
|
||||||
|
unsigned int clockDriftLFOPos, clockDriftLFOSpeed;
|
||||||
short temp[16];
|
short temp[16];
|
||||||
msm5232_device* msm;
|
msm5232_device* msm;
|
||||||
unsigned char regPool[128];
|
unsigned char regPool[128];
|
||||||
|
|
|
@ -1298,6 +1298,8 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
}
|
}
|
||||||
case DIV_SYSTEM_MSM5232: {
|
case DIV_SYSTEM_MSM5232: {
|
||||||
int detune=flags.getInt("detune",0);
|
int detune=flags.getInt("detune",0);
|
||||||
|
int vibSpeed=flags.getInt("vibSpeed",0);
|
||||||
|
float vibDepth=flags.getFloat("vibDepth",0.0f);
|
||||||
bool groupEnv[2];
|
bool groupEnv[2];
|
||||||
int groupVol[8];
|
int groupVol[8];
|
||||||
float capValue[8];
|
float capValue[8];
|
||||||
|
@ -1377,8 +1379,23 @@ bool FurnaceGUI::drawSysConf(int chan, DivSystem type, DivConfig& flags, bool mo
|
||||||
altered=true;
|
altered=true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ImGui::Text("Global vibrato:");
|
||||||
|
|
||||||
|
if (CWSliderInt("Speed",&vibSpeed,0,256)) {
|
||||||
|
if (vibSpeed<0) vibSpeed=0;
|
||||||
|
if (vibSpeed>256) vibSpeed=256;
|
||||||
|
altered=true;
|
||||||
|
} rightClickable
|
||||||
|
if (CWSliderFloat("Depth",&vibDepth,0.0f,256.0f)) {
|
||||||
|
if (vibDepth<0) vibDepth=0;
|
||||||
|
if (vibDepth>256) vibDepth=256;
|
||||||
|
altered=true;
|
||||||
|
} rightClickable
|
||||||
|
|
||||||
if (altered) {
|
if (altered) {
|
||||||
flags.set("detune",detune);
|
flags.set("detune",detune);
|
||||||
|
flags.set("vibSpeed",vibSpeed);
|
||||||
|
flags.set("vibDepth",vibDepth);
|
||||||
|
|
||||||
flags.set("capValue0",capValue[0]);
|
flags.set("capValue0",capValue[0]);
|
||||||
flags.set("capValue1",capValue[1]);
|
flags.set("capValue1",capValue[1]);
|
||||||
|
|
Loading…
Reference in New Issue