First post, by Electronic Genets
I found differences in many emulators of OPL2/OPL3 drums.
wrote:[…]
//Snare Drum
Bit32u sdVol = Op(3)->ForwardVolume(); // it is operator 16
if ( !ENV_SILENT( sdVol ) ) {
Bit32u sdIndex = ( 0x100 + (c2 & 0x100) ) ^ ( noiseBit << 8 );
sample += Op(3)->GetWave( sdIndex, sdVol ); // it is also operator 16
}
wrote:[…]
/* Snare Drum (verified on real YM3812) */
env = volume_calc(SLOT7_2); // it is operator 16
if( env < ENV_QUIET )
{
/* base frequency derived from operator 1 in channel 7 */
unsigned char bit8 = ((SLOT7_1->Cnt>>FREQ_SH)>>8)&1; // it is operator 13
/* when bit8 = 0 phase = 0x100; */
/* when bit8 = 1 phase = 0x200; */
UINT32 phase = bit8 ? 0x200 : 0x100;
/* Noise bit XOR'es phase by 0x100 */
/* when noisebit = 0 pass the phase from calculation above */
/* when noisebit = 1 phase ^= 0x100; */
/* in other words: phase ^= (noisebit<<8); */
if (noise)
phase ^= 0x100;
output[0] += op_calc(phase<<FREQ_SH, env, 0, SLOT7_2->wavetable) * 2;
}
Where is the truth? Does the Dosbox emulator wrongly emulates the Snare Drum or the code marked as "verified on real YM3812"? I know that the multiplier of 13 and 16 operator will be set both to 1 these two codes will generate the same effect... Can anyone please check Snare Drum with different multipliers for operator 13 and 16 on real OPL2/OPL3? There is used operator 13 or 16 for Phase Generator of Snare Drum?
I have no sound card with OPL to check it.
Author of the DINO-2e OPL2-like emulator.
DINO-2e is not OPL2 emulator.