fix adlib key scale levels
Imported-from: https://svn.code.sf.net/p/dosbox/code-0/dosbox/trunk@3173
This commit is contained in:
parent
faa11dfa3d
commit
e688408c10
2 changed files with 60 additions and 51 deletions
|
@ -333,48 +333,54 @@ static const int slot_array[32]=
|
|||
static const UINT32 ksl_tab[8*16]=
|
||||
{
|
||||
/* OCT 0 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
/* OCT 1 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.750), SC(1.125), SC(1.500),
|
||||
SC(1.875), SC(2.250), SC(2.625), SC(3.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.750), SC(1.125), SC(1.500),
|
||||
SC(1.875), SC(2.250), SC(2.625), SC(3.000),
|
||||
/* OCT 2 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(1.125), SC(1.875), SC(2.625),
|
||||
SC(3.000), SC(3.750), SC(4.125), SC(4.500),
|
||||
SC(4.875), SC(5.250), SC(5.625), SC(6.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(1.125), SC(1.875), SC(2.625),
|
||||
SC(3.000), SC(3.750), SC(4.125), SC(4.500),
|
||||
SC(4.875), SC(5.250), SC(5.625), SC(6.000),
|
||||
/* OCT 3 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(1.875),
|
||||
SC(3.000), SC(4.125), SC(4.875), SC(5.625),
|
||||
SC(6.000), SC(6.750), SC(7.125), SC(7.500),
|
||||
SC(7.875), SC(8.250), SC(8.625), SC(9.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(1.875),
|
||||
SC(3.000), SC(4.125), SC(4.875), SC(5.625),
|
||||
SC(6.000), SC(6.750), SC(7.125), SC(7.500),
|
||||
SC(7.875), SC(8.250), SC(8.625), SC(9.000),
|
||||
/* OCT 4 */
|
||||
SC(0.000), SC(0.000), SC(3.000), SC(4.875),
|
||||
SC(6.000), SC(7.125), SC(7.875), SC(8.625),
|
||||
SC(9.000), SC(9.750),SC(10.125),SC(10.500),
|
||||
SC(0.000), SC(0.000), SC(3.000), SC(4.875),
|
||||
SC(6.000), SC(7.125), SC(7.875), SC(8.625),
|
||||
SC(9.000), SC(9.750),SC(10.125),SC(10.500),
|
||||
SC(10.875),SC(11.250),SC(11.625),SC(12.000),
|
||||
/* OCT 5 */
|
||||
SC(0.000), SC(3.000), SC(6.000), SC(7.875),
|
||||
SC(9.000),SC(10.125),SC(10.875),SC(11.625),
|
||||
SC(0.000), SC(3.000), SC(6.000), SC(7.875),
|
||||
SC(9.000),SC(10.125),SC(10.875),SC(11.625),
|
||||
SC(12.000),SC(12.750),SC(13.125),SC(13.500),
|
||||
SC(13.875),SC(14.250),SC(14.625),SC(15.000),
|
||||
/* OCT 6 */
|
||||
SC(0.000), SC(6.000), SC(9.000),SC(10.875),
|
||||
SC(0.000), SC(6.000), SC(9.000),SC(10.875),
|
||||
SC(12.000),SC(13.125),SC(13.875),SC(14.625),
|
||||
SC(15.000),SC(15.750),SC(16.125),SC(16.500),
|
||||
SC(16.875),SC(17.250),SC(17.625),SC(18.000),
|
||||
/* OCT 7 */
|
||||
SC(0.000), SC(9.000),SC(12.000),SC(13.875),
|
||||
SC(0.000), SC(9.000),SC(12.000),SC(13.875),
|
||||
SC(15.000),SC(16.125),SC(16.875),SC(17.625),
|
||||
SC(18.000),SC(18.750),SC(19.125),SC(19.500),
|
||||
SC(19.875),SC(20.250),SC(20.625),SC(21.000)
|
||||
};
|
||||
#undef SC
|
||||
|
||||
/* key scale level lookup */
|
||||
static const INT32 ksl_level[4]=
|
||||
{
|
||||
31,1,2,0
|
||||
};
|
||||
|
||||
/* sustain level table (3dB per step) */
|
||||
/* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/
|
||||
#define SC(db) (UINT32) ( db * (2.0/ENV_STEP) )
|
||||
|
@ -1394,9 +1400,8 @@ INLINE void set_ksl_tl(FM_OPL *OPL,int slot,int v)
|
|||
{
|
||||
OPL_CH *CH = &OPL->P_CH[slot/2];
|
||||
OPL_SLOT *SLOT = &CH->SLOT[slot&1];
|
||||
int ksl = v>>6; /* 0 / 1.5 / 3.0 / 6.0 dB/OCT */
|
||||
|
||||
SLOT->ksl = ksl ? 3-ksl : 31;
|
||||
SLOT->ksl = ksl_level[(v>>6)&3]; /* 0 / 3.0 / 1.5 / 6.0 dB/OCT */
|
||||
SLOT->TL = (v&0x3f)<<(ENV_BITS-1-7); /* 7 bits TL (bit 6 = always 0) */
|
||||
|
||||
SLOT->TLL = SLOT->TL + (CH->ksl_base>>SLOT->ksl);
|
||||
|
|
|
@ -284,48 +284,54 @@ static const int slot_array[32]=
|
|||
static const UINT32 ksl_tab[8*16]=
|
||||
{
|
||||
/* OCT 0 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
/* OCT 1 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.750), SC(1.125), SC(1.500),
|
||||
SC(1.875), SC(2.250), SC(2.625), SC(3.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(0.750), SC(1.125), SC(1.500),
|
||||
SC(1.875), SC(2.250), SC(2.625), SC(3.000),
|
||||
/* OCT 2 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(1.125), SC(1.875), SC(2.625),
|
||||
SC(3.000), SC(3.750), SC(4.125), SC(4.500),
|
||||
SC(4.875), SC(5.250), SC(5.625), SC(6.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(0.000),
|
||||
SC(0.000), SC(1.125), SC(1.875), SC(2.625),
|
||||
SC(3.000), SC(3.750), SC(4.125), SC(4.500),
|
||||
SC(4.875), SC(5.250), SC(5.625), SC(6.000),
|
||||
/* OCT 3 */
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(1.875),
|
||||
SC(3.000), SC(4.125), SC(4.875), SC(5.625),
|
||||
SC(6.000), SC(6.750), SC(7.125), SC(7.500),
|
||||
SC(7.875), SC(8.250), SC(8.625), SC(9.000),
|
||||
SC(0.000), SC(0.000), SC(0.000), SC(1.875),
|
||||
SC(3.000), SC(4.125), SC(4.875), SC(5.625),
|
||||
SC(6.000), SC(6.750), SC(7.125), SC(7.500),
|
||||
SC(7.875), SC(8.250), SC(8.625), SC(9.000),
|
||||
/* OCT 4 */
|
||||
SC(0.000), SC(0.000), SC(3.000), SC(4.875),
|
||||
SC(6.000), SC(7.125), SC(7.875), SC(8.625),
|
||||
SC(9.000), SC(9.750),SC(10.125),SC(10.500),
|
||||
SC(0.000), SC(0.000), SC(3.000), SC(4.875),
|
||||
SC(6.000), SC(7.125), SC(7.875), SC(8.625),
|
||||
SC(9.000), SC(9.750),SC(10.125),SC(10.500),
|
||||
SC(10.875),SC(11.250),SC(11.625),SC(12.000),
|
||||
/* OCT 5 */
|
||||
SC(0.000), SC(3.000), SC(6.000), SC(7.875),
|
||||
SC(9.000),SC(10.125),SC(10.875),SC(11.625),
|
||||
SC(0.000), SC(3.000), SC(6.000), SC(7.875),
|
||||
SC(9.000),SC(10.125),SC(10.875),SC(11.625),
|
||||
SC(12.000),SC(12.750),SC(13.125),SC(13.500),
|
||||
SC(13.875),SC(14.250),SC(14.625),SC(15.000),
|
||||
/* OCT 6 */
|
||||
SC(0.000), SC(6.000), SC(9.000),SC(10.875),
|
||||
SC(0.000), SC(6.000), SC(9.000),SC(10.875),
|
||||
SC(12.000),SC(13.125),SC(13.875),SC(14.625),
|
||||
SC(15.000),SC(15.750),SC(16.125),SC(16.500),
|
||||
SC(16.875),SC(17.250),SC(17.625),SC(18.000),
|
||||
/* OCT 7 */
|
||||
SC(0.000), SC(9.000),SC(12.000),SC(13.875),
|
||||
SC(0.000), SC(9.000),SC(12.000),SC(13.875),
|
||||
SC(15.000),SC(16.125),SC(16.875),SC(17.625),
|
||||
SC(18.000),SC(18.750),SC(19.125),SC(19.500),
|
||||
SC(19.875),SC(20.250),SC(20.625),SC(21.000)
|
||||
};
|
||||
#undef SC
|
||||
|
||||
/* key scale level lookup */
|
||||
static const INT32 ksl_level[4]=
|
||||
{
|
||||
31,1,2,0
|
||||
};
|
||||
|
||||
/* sustain level table (3dB per step) */
|
||||
/* 0 - 15: 0, 3, 6, 9,12,15,18,21,24,27,30,33,36,39,42,93 (dB)*/
|
||||
#define SC(db) (UINT32) ( db * (2.0/ENV_STEP) )
|
||||
|
@ -1494,9 +1500,7 @@ INLINE void set_ksl_tl(OPL3 *chip,int slot,int v)
|
|||
OPL3_CH *CH = &chip->P_CH[slot/2];
|
||||
OPL3_SLOT *SLOT = &CH->SLOT[slot&1];
|
||||
|
||||
int ksl = v>>6; /* 0 / 1.5 / 3.0 / 6.0 dB/OCT */
|
||||
|
||||
SLOT->ksl = ksl ? 3-ksl : 31;
|
||||
SLOT->ksl = ksl_level[(v>>6)&3]; /* 0 / 3.0 / 1.5 / 6.0 dB/OCT */
|
||||
SLOT->TL = (v&0x3f)<<(ENV_BITS-1-7); /* 7 bits TL (bit 6 = always 0) */
|
||||
|
||||
if (chip->OPL3_mode & 1)
|
||||
|
|
Loading…
Add table
Reference in a new issue