http://bugs.winehq.org/show_bug.cgi?id=28616
--- Comment #2 from Andrew Eikum aeikum@codeweavers.com 2011-10-20 10:23:41 CDT --- Created attachment 37022 --> http://bugs.winehq.org/attachment.cgi?id=37022 dsound: Always enumerate the default device first
The problem was PvZ chooses the first device given by DirectSoundEnumerate() as its music output device, instead of using DSDEVID_DefaultPlayback as it probably wants. On MMDevAPI-enabled Windows versions, the first device given to the DSEnumerate() callback is actually the default device. You can swap around the default device on Windows and confirm that by re-running the dsound tests.
Anyways, here's a patch which makes the first device given to the callback be the default one. It fixes this bug for me.