Legato and mapVelocity, TODO: correct?
This commit is contained in:
parent
c58a232cd5
commit
49c214f72e
|
|
@ -2076,7 +2076,7 @@ int DivPlatformOPL::dispatch(DivCommand c) {
|
||||||
commitState(c.chan,ins);
|
commitState(c.chan,ins);
|
||||||
chan[c.chan].insChanged=false;
|
chan[c.chan].insChanged=false;
|
||||||
}
|
}
|
||||||
chan[c.chan].baseFreq=(PCM_CHECK(c.chan))?NOTE_PCM(c.value):
|
chan[c.chan].baseFreq=(PCM_CHECK(c.chan))?NOTE_PCM(c.value+chan[c.chan].sampleNoteDelta+((HACKY_LEGATO_MESS)?(chan[c.chan].std.arp.val-12):(0))):
|
||||||
(c.chan==adpcmChan)?(NOTE_ADPCMB(c.value)):(NOTE_FREQUENCY(c.value));
|
(c.chan==adpcmChan)?(NOTE_ADPCMB(c.value)):(NOTE_FREQUENCY(c.value));
|
||||||
chan[c.chan].note=c.value;
|
chan[c.chan].note=c.value;
|
||||||
chan[c.chan].freqChanged=true;
|
chan[c.chan].freqChanged=true;
|
||||||
|
|
@ -2667,7 +2667,19 @@ DivDispatchOscBuffer* DivPlatformOPL::getOscBuffer(int ch) {
|
||||||
}
|
}
|
||||||
|
|
||||||
int DivPlatformOPL::mapVelocity(int ch, float vel) {
|
int DivPlatformOPL::mapVelocity(int ch, float vel) {
|
||||||
if (PCM_CHECK(ch)) return vel*127.0; // TODO: Covert to log, -0.375dB per step
|
if (PCM_CHECK(ch)) { // TODO: correct?
|
||||||
|
// -0.375dB per step
|
||||||
|
// -6: 64: 16
|
||||||
|
// -12: 32: 32
|
||||||
|
// -18: 16: 48
|
||||||
|
// -24: 8: 64
|
||||||
|
// -30: 4: 80
|
||||||
|
// -36: 2: 96
|
||||||
|
// -42: 1: 112
|
||||||
|
if (vel==0) return 0;
|
||||||
|
if (vel>=1.0) return 127;
|
||||||
|
return CLAMP(round(128.0-(112.0-log2(vel*127.0)*16.0)),0,127);
|
||||||
|
}
|
||||||
if (ch==adpcmChan) return vel*255.0;
|
if (ch==adpcmChan) return vel*255.0;
|
||||||
// -0.75dB per step
|
// -0.75dB per step
|
||||||
// -6: 64: 8
|
// -6: 64: 8
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue