Next Generation Emulation banner
21 - 40 of 57 Posts
When my confidence in my abilities strongly wane, I sure don't feel qualified to keep working without someone more knowledgeable assisting.

Does your sound (epsxe 1.7.0) echo when you move the cursor one time? I only get one 'bink' with FF7 (internal or dsound) but I'm hearing a 'bink...bink' in the video.

I made an audio-only recording of FF7 which is raw output from PEOPS DSound. Almost copying the demo video (see this attachment). I get clean audio, albeit a little incorrect (DSound plugin).

Also put back the last DSound build in the thread above.


EDIT:
There's no current way to have the emulator physically wait for the APU to 'catch up' other than use ePSXe's internal core. Or have the SPU run its own timer (just saw Squall's post about asking Eternal authors).

Seriously doubtful but what happens if you force 'VSync Off' in your graphics control panel (NVidia, ATI, ..)?
 
Discussion starter · #22 · (Edited)
SPUAsync runs the audio thread parallel and disconnected from the video, sometimes the audio will run faster than the video, othertimes it could be slower than the video.

probably why usually Thread + gpu limiting runs better, but if async:wait behavior was added to dsound, it would help.

I've emailed AndyR and Takashi, i'll try and get the eternal source if they still have it.
Whoa, I'm honestly surprised people can still contact the original authors, much less have their email addresses. If we can get the source code, it will be a great help in (more or less) the reviving of PSX SPU emulation. :D But yeah, I'll give that plugin a try with "Force Vsync off". That's really weird, seeing as I forced it on like, last night.


Edit 9:29 PM @shalma, I forced vsync off in the nVidia control panel, tried the plugin and still has buggy sync issues. I hope the source code can be located. I firmly believe that this can be accomplished.

Edit 10:24 PM: I find this to be extremely baffling. 0_o
 
My wife has a simple explanation:

The PEOPS SPU core needs accuracy work...........
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................
...................................................................

Okay, so maybe I can accept that possibility for any de-sync. ;)


EDIT:
Try some older versions of DSound
Browse P.E.Op.S. Files on SourceForge.net
 
Discussion starter · #24 · (Edited)
Okay, I have tried version 1.9 through 1.1 and well, switching back and forth between spu async modes (0, 1 and 2) didn't make a difference in my ears. Maybe I can look for different values in the source code (which, oddly enough, comes with a source forge download oO)? Anyway, do you have any updates on the whole Eternal SPU scene?

Edit 9:07 AM: Okay, so I was looking through some files with Programmer's Notepad (files "spu.c" and "cfg.c") and saw some entries with the word "sync" in it, leading me to believe that maybe those values can be changed. Here's a screenshot of "spu.c" and some the values I found under "sync" (there are 17 different results that I found). Here it is: http://i255.photobucket.com/albums/hh137/Nintendo1889/spu_c.jpg I know it's a shot in the dark, but I can't just sit around doing nothing about this issue.

Edit2 10:12 AM: I may not be a programmer, but I believe that the info I gave may give some hints as to what can be done, right?
 
I don't remember seeing a difference but you can try playing around with:

externals.h
Code:
// sound buffer sizes
// 400 ms complete sound buffer
#define SOUNDSIZE   70560
// 137 ms test buffer... if less than that is buffered, a new upload will happen
#define TESTSIZE    24192
That often can produce more/less latency. Or bad crackling.

spu.c
Code:
void CALLBACK SPUasync(unsigned long cycle)
{
 if(iSpuAsyncWait)
  {
   iSpuAsyncWait++;
   if(iSpuAsyncWait<=64) return;  <--- <= 0
   iSpuAsyncWait=0;
  }
That didn't do anything for me but you can try it out.

dsound.c
Code:
 dsbdesc.dwFlags = /*DSBCAPS_LOCSOFTWARE |*/ DSBCAPS_STICKYFOCUS | DSBCAPS_GETCURRENTPOSITION2;
That will enable HW mixing.

or set both to software mode.

Code:
 dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_LOCSOFTWARE;
 dsbd.dwBufferBytes = 0; 
 dsbd.lpwfxFormat = NULL;
You can use dxdiag to shutdown the HW acceleration to none - you can get improved latency sometimes.

Other than mucking around with the ADSR rates (ugh), that's about all I know to do with DSound. Unless some audiophile can rewrite the buffering system and try it again.


I'll let you try this SOFTWARE mixing build + reduced buffer size - it will crackle but not so badly. It also has Whistler's new load state fix.
 
Discussion starter · #26 · (Edited)
I don't remember seeing a difference but you can try playing around with:

externals.h
Code:
// sound buffer sizes
// 400 ms complete sound buffer
#define SOUNDSIZE   70560
// 137 ms test buffer... if less than that is buffered, a new upload will happen
#define TESTSIZE    24192
That often can produce more/less latency. Or bad crackling.

spu.c
Code:
void CALLBACK SPUasync(unsigned long cycle)
{
 if(iSpuAsyncWait)
  {
   iSpuAsyncWait++;
   if(iSpuAsyncWait<=64) return;  <--- <= 0
   iSpuAsyncWait=0;
  }
That didn't do anything for me but you can try it out.

dsound.c
Code:
 dsbdesc.dwFlags = /*DSBCAPS_LOCSOFTWARE |*/ DSBCAPS_STICKYFOCUS | DSBCAPS_GETCURRENTPOSITION2;
That will enable HW mixing.

or set both to software mode.

Code:
 dsbd.dwFlags = DSBCAPS_PRIMARYBUFFER | DSBCAPS_LOCSOFTWARE;
 dsbd.dwBufferBytes = 0; 
 dsbd.lpwfxFormat = NULL;
You can use dxdiag to shutdown the HW acceleration to none - you can get improved latency sometimes.

Other than mucking around with the ADSR rates (ugh), that's about all I know to do with DSound. Unless some audiophile can rewrite the buffering system and try it again.


I'll let you try this SOFTWARE mixing build + reduced buffer size - it will crackle but not so badly. It also has Whistler's new load state fix.
Alright, I'll give this sucker a try and get back to ya ASAP. Oh, and even though I can change these values with Programmer's Notepad, what do I compile the source with?

Edit 10:35AM: Odd. The crackling is gone (yay!)but.....this is really confusing to me.
 
Try getting a free basic copy of Microsoft Visual Studio. And maybe the DirectX SDK.

I'm using MSVC 6 from the old days. Never bothered to upgrade so I can't provide any more support.

How long do you measure the audio 'gap' to be with ePSXe / eternal / DSound? I still have a hard time finding someone who can accurately measure this.
 
Discussion starter · #28 · (Edited)
Try getting a free basic copy of Microsoft Visual Studio. And maybe the DirectX SDK.

I'm using MSVC 6 from the old days. Never bothered to upgrade so I can't provide any more support.

How long do you measure the audio 'gap' to be with ePSXe / eternal / DSound? I still have a hard time finding someone who can accurately measure this.
Audio gap, you mean like latency/buffer? You mean in the sound effects (such as the *bink* in the cursor sounds or music tempo)?

Edit 11:38 AM: I don't know jack about compiling or using the makefile in MSVC, so....I wonder if Squall Leonhart got a hold of the original Eternal SPU guys.
 
Discussion starter · #30 · (Edited)
Noticed this thread. :heh:
ZSNES board - View topic - P.E.Op.S. DSound Audio SPU Version 1.9


Pete's old SPU plugins

Pete's DSound Audio SPU Version 1.15
+ FF7 cursor sounds largely correct (?) - better than PEOPS seemingly
- Didn't test music
+ Has debug menu (yes!)
- Not open-source

Try out the rest and see which ones you like.
That's really funny that you found that; I was burninated from those forums :D Anyways, I'll give it a whirl.

Edit 9:35 PM - Okay, tried out 1.15 and 1.14 and the cursor sound effects did sound better, but the old ones are missing interpolated sound.

Edit 9:15 AM (6/23/2010): Really baffled about this issue.
 
I noticed that using Eternal SPU + Timer + Wait for buffer free:
- Move the FF7 cursor constantly and you'll hear some 'gaps' / 'pauses' in the audio

This happens with PEOPS DSound 1.8 (any mode)

Now use Eternal SPU + Async + Smooth
- Move the FF7 cursor constantly = no pause like ePSXe 1.7.0 SPU


EDIT:
I can't fix this.

SPUasync - runs faster than the old SPU method of updating per HBlank. The plugin is supposed to adjust how many audio frames are created for more 'cycle accuracy'.

I'm thinking that DirectX use of 'waiting for buffer free' is somehow causing this stutter. Just check the debug graphs for the anomalies to show.

The Eternal guys created 'async' - hopefully they can just update their plugin to include more interpolation.
 
Discussion starter · #32 ·
I noticed that using Eternal SPU + Timer + Wait for buffer free:
- Move the FF7 cursor constantly and you'll hear some 'gaps' / 'pauses' in the audio

This happens with PEOPS DSound 1.8 (any mode)

Now use Eternal SPU + Async + Smooth
- Move the FF7 cursor constantly = no pause like ePSXe 1.7.0 SPU


EDIT:
I can't fix this.

SPUasync - runs faster than the old SPU method of updating per HBlank. The plugin is supposed to adjust how many audio frames are created for more 'cycle accuracy'.

I'm thinking that DirectX use of 'waiting for buffer free' is somehow causing this stutter. Just check the debug graphs for the anomalies to show.

The Eternal guys created 'async' - hopefully they can just update their plugin to include more interpolation.
I couldn't have worded that better; that's exactly the issue that I've been explaining (albeit poorly). :D I thought that the Eternal SPU plugin people have been contacted already (by Squall)...?
 
Discussion starter · #34 ·
Listening to the raw output wave (no DX), you still hear the stutter.

So it's the DSound frequency / ADSR / mixing / voice timing / reg cycle / (..) emulation core. Somewhere in there is the problem. Have no idea what still.

I give up on this for now.
 
Discussion starter · #37 · (Edited)
Listening to the raw output wave (no DX), you still hear the stutter.

So it's the DSound frequency / ADSR / mixing / voice timing / reg cycle / (..) emulation core. Somewhere in there is the problem. Have no idea what still.

I give up on this for now.

..........I see :( What's going to happen in the mean time? I was also confused with "Haven't tried edgbla's new async timing fix yet."


Edit 6/28/2010 9:35 AM - Alright, I'll go ahead and assume that no one is willing to look more into this issue, much less have someone attempt to resolve it. Meh.
 
Discussion starter · #38 ·
Wow oO Seems that no one cares about this issue, just like the last time I talked about it on another forum two years ago. ;)
 
Discussion starter · #40 ·
Doesn't seem like a high priority issue to me, so two days without replies ain't much at all. Besides, you can still just use Eternal and enjoy the non-Gaussian sound. =P
I know, but, it shouldn't just be abandoned like that.....:D
 
21 - 40 of 57 Posts