From 1ab7621a76d1ef82fde77322c12d4076889bed01 Mon Sep 17 00:00:00 2001 From: notaz Date: Fri, 29 Jul 2011 00:31:56 +0300 Subject: spu: do adsr on whole buffer this eliminates need to check adsr state for each sample, we can do multiple at once. Also use ADSR tables from DrHell/shalma. --- plugins/dfsound/spu.c | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) (limited to 'plugins/dfsound/spu.c') diff --git a/plugins/dfsound/spu.c b/plugins/dfsound/spu.c index 228267d..79e534c 100644 --- a/plugins/dfsound/spu.c +++ b/plugins/dfsound/spu.c @@ -108,6 +108,7 @@ static const int f[8][2] = { { 0, 0 }, { 115, -52 }, { 98, -55 }, { 122, -60 } }; +int ChanBuf[NSSIZE]; int SSumLR[NSSIZE*2]; int iFMod[NSSIZE]; int iCycle = 0; @@ -597,8 +598,6 @@ static void *MAINThread(void *arg) for(ns=ns_from;ns store 1T sample data, use that to do fmod on next channel - else // no fmod freq channel { ////////////////////////////////////////////// // ok, left/right sound volume (psx volume goes from 0 ... 0x3fff) @@ -646,13 +656,7 @@ static void *MAINThread(void *arg) if(s_chan[ch].bRVBActive) StoreREVERB(ch,ns,sval); } - - //////////////////////////////////////////////// - // ok, go on until 1 ms data of this channel is collected - - s_chan[ch].spos += s_chan[ch].sinc; } -ENDX: ; } } -- cgit v1.2.3