@@ -15,6 +15,7 @@ wmsx.OPL4AudioWave = function(opl4) {
1515 kslValues = tabs . getKSLValues ( ) ;
1616 rateAttackDurTable = tabs . getRateAttackDurations ( ) ;
1717 rateDecayDurTable = tabs . getRateDecayDurations ( ) ;
18+ envAttackCurve = tabs . getEnvAttackCurve ( ) ;
1819 }
1920
2021 this . connect = function ( machine ) {
@@ -60,24 +61,24 @@ wmsx.OPL4AudioWave = function(opl4) {
6061 wmsx . Util . arrayFill ( dl , 0 ) ;
6162 wmsx . Util . arrayFill ( d2r , 0 ) ;
6263 wmsx . Util . arrayFill ( rr , 0 ) ;
63- wmsx . Util . arrayFill ( volume , 0 ) ;
64+ wmsx . Util . arrayFill ( volume , 0x7f ) ;
6465 wmsx . Util . arrayFill ( am , 0 ) ;
6566 wmsx . Util . arrayFill ( vib , 0 ) ;
6667 wmsx . Util . arrayFill ( rc , 0 ) ;
6768
6869 // Dynamic values
6970
70- wmsx . Util . arrayFill ( volumeAtt , 0 ) ;
71+ wmsx . Util . arrayFill ( volumeAtt , 0x7f << 4 ) ;
7172 wmsx . Util . arrayFill ( amAtt , 0 ) ;
72- wmsx . Util . arrayFill ( envAtt , 0 ) ;
73- wmsx . Util . arrayFill ( totalAtt , 0 ) ;
73+ wmsx . Util . arrayFill ( envAtt , 0x100 << 4 ) ;
74+ wmsx . Util . arrayFill ( totalAtt , 0x100 << 4 ) ;
7475 wmsx . Util . arrayFill ( envStep , IDLE ) ;
7576 wmsx . Util . arrayFill ( envStepLevelDur , 0 ) ;
7677 wmsx . Util . arrayFill ( envStepLevelIncClock , 0 ) ;
7778 wmsx . Util . arrayFill ( envStepLevelInc , 0 ) ;
7879 wmsx . Util . arrayFill ( envStepNext , IDLE ) ;
7980 wmsx . Util . arrayFill ( envStepNextAtLevel , 0 ) ;
80- wmsx . Util . arrayFill ( envLevel , 0 ) ;
81+ wmsx . Util . arrayFill ( envLevel , 256 ) ;
8182 wmsx . Util . arrayFill ( rcOffset , 0 ) ;
8283 } ;
8384
@@ -449,7 +450,7 @@ wmsx.OPL4AudioWave = function(opl4) {
449450 envLevel [ cha ] = 256 ;
450451 envStepLevelIncClock [ cha ] = envStepLevelDur [ cha ] = 0 ; // Never
451452 envStepLevelInc [ cha ] = 0 ;
452- envStepNextAtLevel [ cha ] = 255 ; // Never
453+ envStepNextAtLevel [ cha ] = 257 ; // Never
453454 envStepNext [ cha ] = IDLE ;
454455 break ;
455456 }
@@ -476,14 +477,12 @@ wmsx.OPL4AudioWave = function(opl4) {
476477 }
477478
478479 function updateEnvAttenuation ( cha ) {
479- envAtt [ cha ] = envLevel [ cha ] << 4 ;
480- // envAtt[cha] = (envLevel[cha] === 128 ? 256 : envLevel[cha]) << 5; // Higher attenuation in case of minimum level to produce silence
480+ envAtt [ cha ] = ( envStep [ cha ] === ATTACK ? envAttackCurve [ envLevel [ cha ] ] : envLevel [ cha ] ) << 4 ;
481481 updateTotalAttenuation ( cha ) ;
482482 }
483483
484484 function updateVolumeAttenuation ( cha ) {
485485 volumeAtt [ cha ] = volume [ cha ] << 4 ;
486- // volumeAtt[cha] = (volume[cha] === 15 ? 30 : volume[cha]) << 7; // Higher attenuation in case of minimum volume to produce silence
487486 updateTotalAttenuation ( cha ) ;
488487 }
489488
@@ -555,7 +554,7 @@ wmsx.OPL4AudioWave = function(opl4) {
555554
556555 // Pre calculated tables, factors, values
557556
558- var linearTable , expTable , vibValues , kslValues , rateAttackDurTable , rateDecayDurTable ;
557+ var linearTable , expTable , vibValues , kslValues , rateAttackDurTable , rateDecayDurTable , envAttackCurve ;
559558
560559
561560 // Savestate -------------------------------------------
0 commit comments