OPLL: fix per-channel osc, part 1
This commit is contained in:
parent
90481cc460
commit
4dfd413ead
|
@ -1019,6 +1019,10 @@ static void OPLL_Operator(opll_t *chip) {
|
||||||
}
|
}
|
||||||
|
|
||||||
chip->ch_out = ismod1 ? routput : (output>>3);
|
chip->ch_out = ismod1 ? routput : (output>>3);
|
||||||
|
|
||||||
|
if (!ismod1) {
|
||||||
|
chip->output_ch[(chip->cycles+1)%9] = chip->ch_out;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void OPLL_DoRhythm(opll_t *chip) {
|
static void OPLL_DoRhythm(opll_t *chip) {
|
||||||
|
|
|
@ -191,6 +191,8 @@ typedef struct {
|
||||||
int16_t output_m;
|
int16_t output_m;
|
||||||
int16_t output_r;
|
int16_t output_r;
|
||||||
|
|
||||||
|
int16_t output_ch[9];
|
||||||
|
|
||||||
} opll_t;
|
} opll_t;
|
||||||
|
|
||||||
const opll_patch_t* OPLL_GetPatchROM(uint32_t chip_type);
|
const opll_patch_t* OPLL_GetPatchROM(uint32_t chip_type);
|
||||||
|
|
|
@ -97,6 +97,10 @@ const unsigned char drumSlot[11]={
|
||||||
0, 0, 0, 0, 0, 0, 6, 7, 8, 8, 7
|
0, 0, 0, 0, 0, 0, 6, 7, 8, 8, 7
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const unsigned char visMapOPLL[9]={
|
||||||
|
6, 7, 8, 3, 4, 5, 0, 1, 2
|
||||||
|
};
|
||||||
|
|
||||||
void DivPlatformOPLL::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) {
|
void DivPlatformOPLL::acquire_nuked(short* bufL, short* bufR, size_t start, size_t len) {
|
||||||
static int o[2];
|
static int o[2];
|
||||||
static int os;
|
static int os;
|
||||||
|
@ -124,10 +128,18 @@ void DivPlatformOPLL::acquire_nuked(short* bufL, short* bufR, size_t start, size
|
||||||
OPLL_Clock(&fm,o);
|
OPLL_Clock(&fm,o);
|
||||||
unsigned char nextOut=cycleMapOPLL[fm.cycles];
|
unsigned char nextOut=cycleMapOPLL[fm.cycles];
|
||||||
if ((nextOut>=6 && properDrums) || !isMuted[nextOut]) {
|
if ((nextOut>=6 && properDrums) || !isMuted[nextOut]) {
|
||||||
oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=(o[0]+o[1])<<6;
|
|
||||||
os+=(o[0]+o[1]);
|
os+=(o[0]+o[1]);
|
||||||
|
if (vrc7) oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=(o[0]+o[1])<<6;
|
||||||
} else {
|
} else {
|
||||||
oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=0;
|
if (vrc7) oscBuf[nextOut]->data[oscBuf[nextOut]->needle++]=0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!vrc7) for (int i=0; i<9; i++) {
|
||||||
|
unsigned char ch=visMapOPLL[i];
|
||||||
|
if ((i>=6 && properDrums) || !isMuted[ch]) {
|
||||||
|
oscBuf[ch]->data[oscBuf[ch]->needle++]=(fm.output_ch[i])<<6;
|
||||||
|
} else {
|
||||||
|
oscBuf[ch]->data[oscBuf[ch]->needle++]=0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
os*=50;
|
os*=50;
|
||||||
|
|
Loading…
Reference in New Issue