Sound cards and Linux

I’ve been working with Linux for about 10 years now and it’s come on a lot since then. My new machine for my job here in Pathology is a spiffy Dell machine running Ubuntu 64 and so far setting it up has been largely painless.

The one problem I’ve had is with the high-end Creative X-Fi Sound Card. I haven’t looked into it much up to now, but today I found a page which explained where to find the drivers and get them to work. It was almost reassuring to find the old Linux I remember from the late 90s is still alive and well.

The instructions on getting the driver to work are found on a random Wiki here:

http://gentoo-wiki.com/HOWTO_Creative_Labs_X-Fi

They start by saying what a great card this is and with all these features, then almost immediately tells you that most of these features will never work under Linux. It then presents the following mild boilerplate:

THIS IS A COMPLETE HACK!
Warning: You will most likely screw up some part of your system using these drivers and configuring them the way this guide suggests. The drivers are still unstable, there have been reports of crashing X, ALSA, and locking up the whole computer. Using these drivers is like waving a red flag at a bull…..

The instructions themselves are about 8 pages long, mostly hacks to kernel modules, configure and makefiles. Even after many years working with Linux several of them made me gasp in horror. Here is one extract:

LinuxSys.c

Modify the LinuxSys driver file (drivers/src/ossrv/LinuxSys.c).

Remove the following line (~line 1581):


set_fs(fs);

Modify and Add the following lines from Vasko (~line 1558):


HRESULT sysGetFileSize(CTVOID *This, CTDWORD *pdwSize, CTHANDLE hFile)
{
stFileHdl *pFileHdl = (stFileHdl *) hFile

to


HRESULT
sysGetFileSize(CTVOID *This, CTDWORD *pdwSize, CTHANDLE hFile)
{
stFileHdl *pFileHdl = (stFileHdl *) hFile; // Comments By Vasko
if(!pFileHdl)
{
printk(KERN_WARNING "sysGetFileSize: no file handle\n");
CTRETURN(E_INVALIDARG);
}
if(!pdwSize)
{
printk(KERN_WARNING "sysGetFileSize: no pointer to return value (pdwSize)\n");
CTRETURN(E_INVALIDARG);
}
}

Marvellous. I’ll be going without sound then.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: