diff options
| author | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2011-01-20 00:43:48 +0000 |
|---|---|---|
| committer | SND\shalma_cp <SND\shalma_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2011-01-20 00:43:48 +0000 |
| commit | 39481b5db7eb8925e78de91f72983000e36ce485 (patch) | |
| tree | eb2ce7ffa7e352d6fa9b96c581930284a5b98ab4 /libpcsxcore | |
| parent | a2ef180359e21a5e98cb6170ff2c1f67c7111bb7 (diff) | |
| download | pcsxr-39481b5db7eb8925e78de91f72983000e36ce485.tar.gz | |
remove old cdxa attenuation
- use cdda attenuation only
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@62214 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore')
| -rw-r--r-- | libpcsxcore/cdrom.c | 93 | ||||
| -rw-r--r-- | libpcsxcore/cdrom.h | 2 |
2 files changed, 41 insertions, 54 deletions
diff --git a/libpcsxcore/cdrom.c b/libpcsxcore/cdrom.c index 7c3a1eb1..3b846baa 100644 --- a/libpcsxcore/cdrom.c +++ b/libpcsxcore/cdrom.c @@ -480,6 +480,30 @@ static void ReadTrack( u8 *time ) { } +void CDXA_Attenuation( s16 *buf, int size )
+{
+ s16 *spsound;
+ s32 lc,rc;
+ int i;
+
+ spsound = buf;
+
+ for( i = 0; i < size / 2; i += 2 )
+ {
+ lc = (spsound[i+0] * cdr.AttenuatorLeft[0] + spsound[i+1] * cdr.AttenuatorRight[1]) / 128;
+ rc = (spsound[i+1] * cdr.AttenuatorRight[0] + spsound[i+0] * cdr.AttenuatorLeft[1]) / 128;
+
+ if( lc < -32768 ) lc = -32768;
+ if( rc < -32768 ) rc = -32768;
+ if( lc > 32767 ) lc = 32767;
+ if( rc > 32767 ) rc = 32767;
+
+ spsound[i + 0] = lc;
+ spsound[i + 1] = rc;
+ }
+}
+
+
void AddIrqQueue(unsigned char irq, unsigned long ecycle) { cdr.Irq = irq; cdr.eCycle = ecycle; @@ -843,8 +867,11 @@ void cdrPlayInterrupt() CDR_readTrack( temp );
}
- if( CDR_readCDDA )
+ if( CDR_readCDDA ) {
CDR_readCDDA( cdr.SetSectorPlay[0], cdr.SetSectorPlay[1], cdr.SetSectorPlay[2], cdr.Transfer );
+
+ CDXA_Attenuation( (short *) cdr.Transfer, 2352/2 );
+ }
@@ -1657,10 +1684,13 @@ void cdrWrite0(unsigned char rt) { // Tekken: CDXA fade-out else if( rt == 2 ) { - cdr.LeftVol = 0; + //cdr.AttenuatorLeft[0] = 0;
+ //cdr.AttenuatorLeft[1] = 0;
} else if( rt == 3 ) { - cdr.RightVol = 0; + // Tekken 3 - character menu (don't do this!)
+ //cdr.AttenuatorRight[0] = 0;
+ //cdr.AttenuatorRight[1] = 0;
} } @@ -1690,7 +1720,7 @@ void cdrWrite1(unsigned char rt) { // Tekken: CDXA fade-out if( (cdr.Ctrl & 3) == 3 ) { - cdr.RightVol |= (rt << 8); + cdr.AttenuatorRight[0] = rt;
} @@ -2056,10 +2086,10 @@ void cdrWrite2(unsigned char rt) { // Tekken: CDXA fade-out if( (cdr.Ctrl & 3) == 2 ) { - cdr.LeftVol |= (rt << 8); + cdr.AttenuatorLeft[0] = rt;
} else if( (cdr.Ctrl & 3) == 3 ) { - cdr.RightVol |= (rt << 0); + cdr.AttenuatorRight[1] = rt;
} @@ -2105,56 +2135,13 @@ void cdrWrite3(unsigned char rt) { // Tekken: CDXA fade-out if( (cdr.Ctrl & 3) == 2 ) { - cdr.LeftVol |= (rt << 0); + cdr.AttenuatorLeft[1] = rt;
} else if( (cdr.Ctrl & 3) == 3 && rt == 0x20 ) { - u16 cdleft, cdright;
- u8 l1,l2,r1,r2,tmp;
-
#ifdef CDR_LOG
- CDR_LOG( "CD-XA Volume: %X %X\n", cdr.LeftVol, cdr.RightVol );
-#endif
-
- // TODO: Use real attenuation (left - right mixer)
-#if 0
- // write CD-XA volumes
- SPU_writeRegister( H_CDLeft, cdleft );
- SPU_writeRegister( H_CDRight, cdright );
-#else
- /*
- Eternal SPU: scale volume from [0-ffff] -> [0,8000]
- - Destruction Derby Raw - movies (ff00 ff00)
- - Smurf Racer - movies (00ff 00ff)
- - V-Rally 2 - movies (FC00 FC00)
- */
-
- // Fake attenuation volume hack for Eternal
- l1 = (cdr.LeftVol >> 8) & 0xff;
- l2 = (cdr.LeftVol >> 0) & 0xff;
- r1 = (cdr.RightVol >> 8) & 0xff;
- r2 = (cdr.RightVol >> 0) & 0xff;
-
- if( l1 > 0x80 ) l1 = 0x80;
- if( l2 > 0x80 ) l2 = 0x80;
- if( r1 > 0x80 ) r1 = 0x80;
- if( r2 > 0x80 ) r2 = 0x80;
-
- // spu compatibility volume hack
- if( l1 < l2 ) { tmp = l1; l1 = l2; l2 = tmp; }
- if( r1 < r2 ) { tmp = r1; r1 = r2; r2 = tmp; }
- if( l1 == 0x80 ) { l2 = 0; }
- if( r1 == 0x80 ) { r2 = 0; }
-
- // spu compat hack #2
- if( l1 >= 0x80 ) { l1 = 0x7f; }
- if( r1 >= 0x80 ) { r1 = 0x7f; }
-
- cdleft = (l1 << 8) | l2;
- cdright = (r1 << 8) | r2;
-
- // write CD-XA volumes
- SPU_writeRegister( H_CDLeft, cdleft );
- SPU_writeRegister( H_CDRight, cdright );
+ CDR_LOG( "CD-XA Volume: %X %X | %X %X\n",
+ cdr.AttenuatorLeft[0], cdr.AttenuatorLeft[1],
+ cdr.AttenuatorRight[0], cdr.AttenuatorRight[1] );
#endif
} diff --git a/libpcsxcore/cdrom.h b/libpcsxcore/cdrom.h index 43f5b2fd..c943f3b1 100644 --- a/libpcsxcore/cdrom.h +++ b/libpcsxcore/cdrom.h @@ -93,7 +93,7 @@ typedef struct { u8 FastForward;
u8 FastBackward;
- u32 LeftVol, RightVol;
+ u8 AttenuatorLeft[2], AttenuatorRight[2];
} cdrStruct; extern cdrStruct cdr; |
