From 797d75363bc6db6abd726dc4fa4e0dd9e3da17e1 Mon Sep 17 00:00:00 2001 From: "R. Belmont" Date: Sat, 19 Jan 2008 17:10:10 +0000 Subject: [PATCH] Preserve fractional part of sample offset when looping, fixes remaining pitch stability problems. --- src/emu/sound/scsp.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/src/emu/sound/scsp.c b/src/emu/sound/scsp.c index 7460880f235..98b2420d185 100644 --- a/src/emu/sound/scsp.c +++ b/src/emu/sound/scsp.c @@ -40,8 +40,9 @@ #define EG_SHIFT 16 -#define FM_DELAY 4 // delay in number of slots processed before samples are written to the FM ring buffer - +#define FM_DELAY 0 // delay in number of slots processed before samples are written to the FM ring buffer + // driver code indicates should be 4, but sounds distorted then + // include the LFO handling code #include "scsplfo.c" @@ -1009,7 +1010,8 @@ INLINE INT32 SCSP_UpdateSlot(struct _SCSP *SCSP, struct _SLOT *slot) } for (addr_select=0;addr_select<2;addr_select++) - { + { + INT32 rem_addr; switch(LPCTL(slot)) { case 0: //no loop @@ -1021,26 +1023,35 @@ INLINE INT32 SCSP_UpdateSlot(struct _SCSP *SCSP, struct _SLOT *slot) break; case 1: //normal loop if(*addr[addr_select]>=LEA(slot)) - *slot_addr[addr_select]=LSA(slot)<=LSA(slot)) && !(slot->Backwards)) { - *slot_addr[addr_select]=LEA(slot)<Backwards=1; } - if((*addr[addr_select]<=LSA(slot) || (*slot_addr[addr_select]&0x80000000)) && slot->Backwards) - *slot_addr[addr_select]=LEA(slot)<Backwards) + { + rem_addr = (LSA(slot)<=LEA(slot)) //reached end, reverse till start { - *slot_addr[addr_select]=LEA(slot)<Backwards=1; } - if((*addr[addr_select]<=LSA(slot) || (*slot_addr[addr_select]&0x80000000)) && slot->Backwards)//reached start or negative + else if((*addr[addr_select]Backwards)//reached start or negative { - *slot_addr[addr_select]=LSA(slot)<Backwards=0; } break;