Java-Gaming.org    
Featured games (78)
games approved by the League of Dukes
Games in Showcase (426)
Games in Android Showcase (89)
games submitted by our members
Games in WIP (466)
games currently in development
News: Read the Java Gaming Resources, or peek at the official Java tutorials
 
    Home     Help   Search   Login   Register   
Pages: [1]
  ignore  |  Print  
  Sound syncing in emulator  (Read 1342 times)
0 Members and 1 Guest are viewing this topic.
Offline coramoor

Senior Newbie




Java games rock!


« Posted 2003-10-25 13:19:32 »

I'm working on an NES emulator, and having problems with syncing the sound.. I'm using the Perf-timer to time the framerate, but it seems I'm still producing the audio too fast.
The sourcedataline buffer will very quickly fill up, and introduce considerable lag from when an event takes place in the game until it's eventually reflected in the music/sound fx.

The amount of samples produced each frame is constant, so it seems I'm producing a little bit too much. The problem now is writing the produced samples to the line without the buffer emptying, and also without writing too much.

What would be the best way to sync this? I've tried adjusting the sleep time between frames, and also sleep some extra when too many frames are produced, but it seems that no matter how I do it, I either get lots of buffer underflows, or a horrible lag.. Cry

I guess the real problem is, I don't know how much data is in the buffer at any given moment. The method for getting the available bytes before blocking doesn't seem to be updated frequently enough, so I can't rely on it. Is there any solution to this? Any sound package I can use that is better at this?
Any help will be appreciated :-)
Offline erikd

JGO Ninja


Medals: 15
Projects: 4
Exp: 14 years


Maximumisness


« Reply #1 - Posted 2003-10-29 09:31:01 »

Yes, that is a difficult one which I haven't totally solved myself.
What I did was:
- Have a seperate thread with the sound chip emulator in a tight loop that fills the sound buffer.
- The sound buffer is as small as possible (to avoid underruns and to minimize lag)
- The separate thread just keeps filling the buffer until it blocks (when the buffer is full).
- The main thread feeds the sound thread with commands for the sound chip (usually using CPU ports or memory mapped I/O).

This approach works, but has some problems (feeding many commands in quick succession is sometimes a problem, sound timing is sometimes unstable). Maybe I need to sync the threads but I'm not sure...
It looks like sometimes the thread blocks for longer periods than other times causing the instabilities where I expected that blocking to be of more or less fixed periods.

Offline coramoor

Senior Newbie




Java games rock!


« Reply #2 - Posted 2003-10-29 10:35:37 »

The sound chip emulation and the sampling is clocked by the CPU emulation,  so I can't put it in a separate thread. If I don't sample at the correct time, the produced sound won't be accurate, especially at high frequencies. I've tried getting a smaller sound buffer, but it stays at 65536, which is way too big (is this device-dependent?).
Games published by our own members! Check 'em out!
Legends of Yore - The Casual Retro Roguelike
Offline erikd

JGO Ninja


Medals: 15
Projects: 4
Exp: 14 years


Maximumisness


« Reply #3 - Posted 2003-10-29 14:06:48 »

Hmm I dunno, I set up a line buffer of 4096 and that seems to work fine here.

You might want to check out NESCafe (http://www.davos.co.uk/nescafe/index.html), another NES emulator with sound. As far as I remember, sound was emulated ok.

Pages: [1]
  ignore  |  Print  
 
 
You cannot reply to this message, because it is very, very old.

 

Add your game by posting it in the WIP section,
or publish it in Showcase.

The first screenshot will be displayed as a thumbnail.

xsi3rr4x (74 views)
2014-04-15 18:08:23

BurntPizza (68 views)
2014-04-15 03:46:01

UprightPath (80 views)
2014-04-14 17:39:50

UprightPath (65 views)
2014-04-14 17:35:47

Porlus (81 views)
2014-04-14 15:48:38

tom_mai78101 (105 views)
2014-04-10 04:04:31

BurntPizza (165 views)
2014-04-08 23:06:04

tom_mai78101 (261 views)
2014-04-05 13:34:39

trollwarrior1 (210 views)
2014-04-04 12:06:45

CJLetsGame (220 views)
2014-04-01 02:16:10
List of Learning Resources
by SHC
2014-04-18 03:17:39

List of Learning Resources
by Longarmx
2014-04-08 03:14:44

Good Examples
by matheus23
2014-04-05 13:51:37

Good Examples
by Grunnt
2014-04-03 15:48:46

Good Examples
by Grunnt
2014-04-03 15:48:37

Good Examples
by matheus23
2014-04-01 18:40:51

Good Examples
by matheus23
2014-04-01 18:40:34

Anonymous/Local/Inner class gotchas
by Roquen
2014-03-11 15:22:30
java-gaming.org is not responsible for the content posted by its members, including references to external websites, and other references that may or may not have a relation with our primarily gaming and game production oriented community. inquiries and complaints can be sent via email to the info‑account of the company managing the website of java‑gaming.org
Powered by MySQL Powered by PHP Powered by SMF 1.1.18 | SMF © 2013, Simple Machines | Managed by Enhanced Four Valid XHTML 1.0! Valid CSS!