http://bugs.winehq.org/show_bug.cgi?id=32326
Bug #: 32326 Summary: DirectSound output in SNES9x gives crackling/glitchy audio Product: Wine Version: 1.5.18 Platform: x86-64 URL: http://files.ipherswipsite.com/snes9x/snes9x-1.53-win3 2.zip OS/Version: Linux Status: UNCONFIRMED Severity: minor Priority: P2 Component: directx-dsound AssignedTo: wine-bugs@winehq.org ReportedBy: markk@clara.co.uk Classification: Unclassified
This bug applies to the SNES9x Super NES emulator. I'm testing with Wine 1.5.18-72-g0c0b229, Lubuntu 11.10 x86-64, Nvidia driver 304.64, SNES9x 1.53.
(I set the bug component to directx-dsound, but that might not be correct.)
Sound output using DirectSound is very CPU-intensive, and the sound crackles/glitches. Or rather, something about the sound output takes a relatively long time. According to "top" the CPU usage of SNES9x itself doesn't go through the roof with sound enabled.
Emulation speed easily reaches 60fps with sound output disabled. On native Windows that's the case with DirectSound output (as opposed to the default is enabled too. CPU usage with sound disabled is ~26%.
However on Wine with 48kHz DirectSound output the frame rate I see drops to ~45fps, CPU usage in top ~24% (lower usage because fewer frames per second are being emulated). If I disable the "Sync Sound" option frame rate returns to 60fps, ~30% CPU, but the sound still crackles.
That's with the default buffer length of 64ms. Increasing that to 210ms helps a bit; I get 60fps even with Sync Sound enabled, though the sound still crackles. Decreasing buffer length to 16ms I get about 10fps with Sync Sound enabled.
I don't think this problem is due to my hardware; other sound-producing programs like Audacious, flash plugin etc. seem to be fine. And by comparison, the Nestopia NES emulator in Wine produces (almost) glitch-free sound regardless of the program's latency setting.
$ lspci -vv -s00:1b.0 00:1b.0 Audio device: Intel Corporation 82801H (ICH8 Family) HD Audio Controller (rev 03) Subsystem: Lenovo Device 384e Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR+ FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 0, Cache Line Size: 64 bytes Interrupt: pin A routed to IRQ 47 Region 0: Memory at fc300000 (64-bit, non-prefetchable) [size=16K] Capabilities: <access denied> Kernel driver in use: HDA Intel Kernel modules: snd-hda-intel
To hopefully reproduce the issue: - Download and unzip SNES9x - Download a ROM image, e.g. from http://pdroms.de/files/supernintendoentertainmentsystem/skipp-and-friends-pd... - Run SNES9x. Choose Sound->Settings... and change Sound Driver to Snes9x DirectSound and Playback Rate to 48 KHz. (Selecting any other rate causes a crash for me, see bug 32312.) - Select Video->Display Configuration... and change Output Method to DirectDraw. (The default Direct3D just gives a blank screen, see bug 32319.) - Select File->Load Game... and choose the ROM image. - You should see graphics in the window and hear crackling/glitching sound. - In the sound settings, you can experiment with changing the buffer length and toggling the "Synchronize with sound core" option. I couldn't find any combination which gave artifact-free sound.
For a +dsound log see the one I uploaded for bug 32312 at http://bugs.winehq.org/attachment.cgi?id=42668