Wednesday, November 5, 2008

Microphones (and Rosetta Stone 3) in Wine

Recently I had an urge to brush up on my Spanish and thought I would try Rosetta Stone, however there is no Linux version. I thought instead of "messing around" with Wine I'd just install VirtualBox and use an XP Pro instance. Everything worked alright but the memory and CPU overhead was a little too much for my machine (1.7GHz Pentium M, 1GB DDR). It would run out of memory and thrash the HDD like crazy if almost any other program was running in Linux, defeating a large part of the advantage of virtualizing Windows in the first place.

So then I read in Wine's AppDB that Rosetta 3 seemed to work alright with recent versions, so I gave it a shot and it indeed installed perfectly with Wine 1.1.7 (using the PPA in Intrepid). The best part is that Rosetta uses a single sqlite3 database to track users' progress, so all I had to do was copy that over from the VM and all my progress and history was there in my Wine install!

But then came the problem: I couldn't get my microphone to work! It worked fine in the VirtualBox setup so I knew my hardware was fundamentally compatible. I then tried as many permutations of the follow settings as I could think of:
  • changing Wine to ALSA or OSS drivers
  • enabling and disabling all sorts of ALSA and OSS levels and captures in Volume Control
  • running Wine via `padsp`
Finally I came across an ubuntuforums thread where someone's solution to getting their microphone working with Wine was setting Wine to use OSS and then:
  1. killall pulseaudio
  2. aoss wine program.exe
And that worked for me! I was so full of joy. However, I am a little worried about what consequences killing pulse will have on the system for the duration of the session, and I don't really understand what aoss does. Can anyone enlighten me on why pulseaudio is a part of the problem here, and why aoss is necessary? This was a very helpful solution to me and thought it might be useful to others as well, but does anyone know of a better way that might co-exist with pulseaudio?


crimsun said...

Killing PulseAudio and running `aoss foo' accomplishes the same wrapping via LD_PRELOAD as does `padsp foo' with one important distinction: the former wraps directly to ALSA's plugin layer, while the latter wraps to PulseAudio's.

Intrepid's PulseAudio isn't as smart as Fedora 10's (i.e., the latter has a boatload of fixes to the latest upstream PulseAudio version - and no surprise, given its creator has been a Red Hat employee for a tick), so the seemingly erratic performance of padsp and PulseAudio is largely resolved already. You'll see those fixes in Jaunty's.

Aaron Strontsman said...

Thanks for this tip, I just found out that this works for Skype (Linux version, actually), too. (Otherwise it would always show me a "sound playback error".

kiss said...
This comment has been removed by a blog administrator.
climatewarrior said...

Has anybody gotten this to work on a 64 linux system?

Ken said...

Seems to be a no-go in 64-bit Linux, AFAIK I've tries all the available methods (attaching to sound ports/channels/devices, etc).

Markus said...

Just change Wine to Alsa and everything works fine.