[Bug 37890] MCI 24bit .wav playback on top of pulseaudio (both with winealsa.drv,winepulse.drv) broken
wine-bugs at winehq.org
wine-bugs at winehq.org
Wed Jan 14 03:21:31 CST 2015
https://bugs.winehq.org/show_bug.cgi?id=37890
--- Comment #3 from debuser <debuser1 at mt2014.com> ---
Created attachment 50468
--> https://bugs.winehq.org/attachment.cgi?id=50468
Check wBitsPerSample in PCM_StreamOpen()
This is a bug in wine: wav-file contains 24-bit audio. Pulse-alsa plugin only
advertises S16 and S32, no S24 format (see `aplay -v --dump-hw-params -d1
-Ddefault /dev/zero`). When attempting to set it snd_pcm_hw_params_set_format()
fails to set S24_3LE, failing winealsa:AudioClient_Initialize. WINMM_OpenDevice
catches the fail and calls WINMM_MapDevice to try other rates/formats. 16-bit
one succeeds, calling acmStreamOpen, which calls PCM_StreamOpen, which sets
cvtKeepRate to one of PCM_ConvertKeepRate[] values. This where things break.
PCM_StreamOpen assumes that wBitsPerSample is either 8 or 16, so it sets
conversion to 8->16 bits instead of 24->16 bits that it does not support. When
sound plays acmStreamConvert->PCM_StreamConvert->cvtKeepRate->cvtSS816K gets
called and turns 24-bit sound into noise.
Attached is a tiny patch for PCM_StreamOpen to fail if format is not 8 or
16-bit. It's not a workaround but it stops wine from producing noise.
The bug never happens with alsa because alsa provides a
default=plug->softvol->dmix->hw chain, and its "plug" autoconversion module
supports any possible input format, so snd_pcm_hw_params_set_format() never
fails and wine's conversion code never gets called.
To reproduce the bug and hear the noise without pulseaudio, using just alsa,
you need a "broken" ~/.asoundrc bypassing plug autoconversion and limited
supported formats, for example:
pcm.!default {
type hw
card 0
format S16_LE
rate 44100
channels 2
}
The workaround for pulseaudio is to fix its alsa-plugin config (usually
/usr/share/alsa/alsa.conf.d/pulse.conf or /usr/share/alsa/pulse-alsa.conf or
similar) adding "plug" autoconversion there replacing:
pcm.!default {
type pulse
}
with
pcm.!default {
type plug
slave.pcm {
type pulse
}
}
--
Do not reply to this email, post in Bugzilla using the
above URL to reply.
You are receiving this mail because:
You are watching all bug changes.
More information about the wine-bugs
mailing list