http://bugs.winehq.org/show_bug.cgi?id=28517
Raymond superquad.vortex2@gmail.com changed:
What |Removed |Added ---------------------------------------------------------------------------- CC| |superquad.vortex2@gmail.com
--- Comment #2 from Raymond superquad.vortex2@gmail.com 2011-09-30 02:54:34 CDT --- (In reply to comment #1)
This seems to be driver-specific. I can reproduce this with ALSA, but not with OSS or PulseAudio via ALSA.
It looks like what's happening is the application has periods where it plays no sound effects, so dsound runs out of data to send. That's fine and by design, but the ALSA driver doesn't handle the underrun situation very well. Once an underrun occurs, everything falls apart and ALSA refuses to report underruns or recover in any consistent way.
I'll keep looking at it.
what is the meaning of "This->bufsize_frames" ?
if(!duration) duration = 300000; /* 0.03s */ This->bufsize_frames = ceil((duration / 10000000.) * fmt->nSamplesPerSec); This->local_buffer = HeapAlloc(GetProcessHeap(), 0, This->bufsize_frames * fmt->nBlockAlign);
can you add snd_pcm_dump() between snd_pcm_sw_params() and snd_pcm_prepare()
snd_pcm_uframes_t boundary; + snd_output_t *output = NULL; const WAVEFORMATEXTENSIBLE *fmtex = (const WAVEFORMATEXTENSIBLE *)fmt;
if((err = snd_pcm_sw_params(This->pcm_handle, sw_params)) < 0){ WARN("Unable to set sw params: %d (%s)\n", err, snd_strerror(err)); hr = E_FAIL; goto exit; }
+ snd_output_stdio_attach(&output, stdout, 0); + if (err == 0) { + snd_pcm_dump(This->pcm_handle, output); + snd_output_close(output); + };
if((err = snd_pcm_prepare(This->pcm_handle)) < 0){